2015-12-14 3 views
0

После вызова ajax мой php скрипт echo s out a json_encode d многомерный массив. Когда я перебираю массив в своем javascript, он выполняет итерацию над каждым отдельным символом вместо элементов массива верхнего уровня. Зачем?цикл по многомерному массиву выводит отдельные символы

JS

$('.test').on('click',function(){ 
     $.ajax({ 
      url: 'http://domain.com/my/script, 
     }).done(function(multidimensionalArray) { 
      console.log(multidimensionalArray);   //outputs the seemingly correct array 
      console.log(multidimensionalArray.length); //outputs number of characters (instead of the expected 20...) 
     }) 
    }); 

PHP

public function calledByAjax() { 
    $items = namespace\items\GetList::getAll(array(
     'limit' => 20 // This appropriately limits the results to 20, which is why 20 is expected above in the js 
    )); 

    $items_array = array(); 
    foreach($items as $key=>$item){ 
     $temp = array (
      'attr1' => $item->getPrivateVar1(), 
      'attr2' => $item->getPrivateVar2(), 
      'attr3' => $item->getPrivateVar3(), 
     ); 
     $items_array[$key] = $temp; 
    } 
    echo json_encode($items_array); 
    exit(0); 
} 

console.log (multidimensionalArray)

[{"attr1":"The variable","attr2":"the variable","attr3":"the variable"},... 
...so on for 20 items... 
] 

console.log (multidimensionalArray.length)

1562 
+0

Вы можете разместить JSON, полученный клиентом. – user1032531

+0

Также, если вы переходите на 'exit (json_encode ($ items_array));'? – user1032531

+0

А также добавьте 'header ('Content-Type: application/json');' перед тем, как эхо-сообщение что-нибудь. – user1032531

ответ

0

Вы не работаете с объектом, а со строкой.

Вы должны убедиться, что полученный результат из вашего php-скрипта (строки) анализируется как json. Самый простой способ сделать это, чтобы указать dataType:

$('.test').on('click',function(){ 
    $.ajax({ 
     url: 'http://domain.com/my/script', 
     dataType: 'json' // the expected data type is json, 
          // jQuery will parse it automatically 
    }).done(function(multidimensionalArray) { 
     console.log(multidimensionalArray);   //outputs the seemingly correct array 
     console.log(multidimensionalArray.length); //outputs number of characters (instead of the expected 20...) 
    }) 
}); 
Смежные вопросы