Проблема с получением длины массива из AJAX-запроса JSON в JavaScript, когда массив не объект - PullRequest
0 голосов
/ 12 мая 2011

У меня проблема с получением длины массива, когда он не инициализирован в формате: var variable = new Array();

Вот мой код:

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 = data.qis;
         ncs = data.ncs;
         nzs = data.nzs;
         tps = data.tps;
         display_question();

      }

   } );

}

Проблема в том,что когда я пытаюсь вернуть длину qns примерно так: qns.length, она ничего не возвращает.Я подозреваю, что это может быть потому, что когда я читаю в массиве из ответа JSON, это не как объект массива.Есть ли способ это исправить?Буду признателен за любую помощь!:)

1 Ответ

0 голосов
/ 12 мая 2011

Нет разницы между массивами / объектами, которые вы получаете через JSON, и массивами, созданными в JavaScript. Объекты и массивы JSON анализируются на JavaScript.
И вообще нет необходимости звонить new Array().

Кажется, data.qnr это объект, а не массив. Вам придется перебирать объекты и считать элементы самостоятельно.

Однако, поскольку кажется, что объект представляет собой непрерывные цифровые клавиши, было бы лучше создать правильный вывод (массив) с самого начала.

В ваших комментариях, которые вы написали, вы используете json_encode( $json_array, JSON_FORCE_OBJECT ) для создания вывода JSON. Это преобразует каждый массив, даже числовой, в объекты.

Вместо этого просто используйте json_encode($json_array). По умолчанию PHP преобразует ассоциативные массивы в объекты в JSON и числовые массивы в ... ну, массивы;)

Если вы сделаете это, data.qnr будет работать как положено в JavaScript.


Также обратите внимание, что вместо dataType: 'text' вы можете установить для него значение json, и jQuery автоматически проанализирует ответ для вас (поэтому не нужно звонить jQuery.parseJSON).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...