开发者

Problem with getting length of array from JSON ajax request in JavaScript when array not object

I have a problem with getting the length of an array, when it is not initialized in the format: var variable = new Array();

Here is my code:

var inx;
var qns;
var qis;
var ncs;
var nzs;
var tps;

function display_question()
{

   $( "#question_no" ).text( qns[ inx ] );
   $( "#question_nc" ).text( ncs[ inx ] );
   $( "#question_nz" ).text( nzs[ inx ] );
   $( "#the_question" ).hide();
   $( "#the_question" ).text( tps[ inx ] );
   $( "#the_question" ).fadeIn( 500 );

}

function next_question()
{

   var arr_len = qns.length;

   if( inx < arr_len )
   {

      inx++;
      display_question();

   }

}

function prev_question()
{

   if( inx > 0 )
   {

      inx--;
      display_question();

   }

}

function get_questions()
{

   var url = "php/pytania.php"; 

   $.ajax(
   {

      cache: false,
      async: false,
      type: "GET",
      dataType: "text",
      url: url,
      success: function( response ) 
      { 

         data = jQuery.parseJSON( response );

         inx = 0;
         qns = data.qns;
         qis 开发者_StackOverflow中文版= data.qis;
         ncs = data.ncs;
         nzs = data.nzs;
         tps = data.tps;
         display_question();

      }

   } );

}

The problem is that when I try to return the length of qns like so: qns.length, it doesn't return anything. I suspect that this may be because when i read in the array from the JSON response, it is not as an array object. Is there any way to fix this? I'd appreciate any help! :)


There is no difference between arrays/objects you retrieve via JSON and those created in JavaScript. The JSON objects and arrays are parsed into JavaScript ones.
And there is actully no need to call new Array() ever.

It seems data.qnr is an object not an array. You would have to loop over the objects and count the elements yourself.

However as it seems that the object is continuous numerical keys, it would be better to create the correct output (array) from the beginning.

In your comments you wrote you use json_encode( $json_array, JSON_FORCE_OBJECT ) to create the JSON output. This will convert every array, even numerical ones, into objects.

Instead, just use json_encode($json_array). By default PHP will convert associative arrays to objects in JSON and numerical arrays to ... well, arrays ;)

If you do this, data.qnr will work as expected in JavaScript.


Also note, instead of dataType: 'text', you can set the it to json and jQuery will parse the response automatically for you (so no need to call jQuery.parseJSON).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜