Как передать массив с помощью PHP и Ajax в Javascript?

Извиняюсь, если это объяснение непонятно, мне тоже трудно понять. Как я могу использовать PHP и Ajax для отправки массива в Javascript? Я использую Ajax для получения массива фотографий, который затем я хочу добавить к пустой <div> на моей странице.

JQuery выглядит следующим образом:

 $.ajax({ url: "<?php echo site_url('demo/getPhotos/'); ?>", type: 'POST', data: form_data, success: function(data) { alert(data); } 

И функция getPhotos PHP выглядит так:

 <?php $photos = array(); foreach ($data as $photo) { array_push($photos,$photo['source']); } // echo json_encode($photos); How should I be returning $photos? 

Если я просто echo $photos; данные отправляются на обратный вызов успеха, но, похоже, он не находится в удобном для использования формате.

Если я делаю var_dump($photos) в PHP, результат выглядит примерно так:

 array(4) { [0]=> string(14) "some_image.jpg" [1]=> string(14) "some_image.jpg" [2]=> string(14) "some_image.jpg" [3]=> string(14) "some_image.jpg" } 

Я пробовал различные комбинации json_encode и тому подобное, но на самом деле я угадываю и не уверен в теории, стоящей за ней. Каков наилучший способ передачи данных с PHP на Javascript в этом контексте?

Пытаться:

 $.ajax({ url: "<?php echo site_url('demo/getPhotos/'); ?>", type: 'POST', data: form_data, dataType:"json", success: function(data) { alert(data[0]); } 

На стороне PHP вы захотите напечатать:

 print json_encode($photos); 

Еще одна вещь, которую вы могли бы попробовать, чтобы лучше инкапсулировать ваш код, и в качестве примера дальнейшей полезности JSON, будет:

 print json_encode(array("photolist"=>$photos,"photo_owner"=>"Me!")); 

Затем на сервере вы получите доступ к ним с помощью:

 data.photolist[0]; //First photo data.photo_owner; //The owner of the photo set 

Я сделал массив $result в PHP и в конце запроса.

  echo json_encode($result); 

и в функции JS $.post обработчика:

 var obj = $.parseJSON(data); var v = data.k; 

где k – ключевое значение в ассоциативном массиве.

json_encode – это, безусловно, путь. jQuery даже имеет встроенную поддержку для разбора JSON. Вы можете использовать, например,

 $.ajax({ url: "<?php echo site_url('demo/getPhotos/'); ?>", type: 'POST', data: form_data, dataType: 'json', // will automatically convert array to JavaScript success: function(array) { alert(array[0]); // alerts first string } }); 

верните сам json, а затем постройте массив в js, зациклив на json следующим образом:

 var array=[]; for(var key in json) { if(json.hasOwnProperty(key)) array.push(json[key]); } 

Или вы можете просто работать с самим json по какой-либо причине необходимости в массиве?

что-то вроде json [0] или json [1] и т. д.

json_encode rulez, когда вам это нужно.

Недавно я тоже научился этому крутому! Вот как вы это делаете:

 function jsonResponse($array) { header('Content-type: application/json; charset=utf-8;'); die(json_encode($array)); } 

Это необязательно, если вы хотите это сделать, вам не обязательно, но в моей системе MVC я стараюсь писать так … Итак, сначала я делаю запрос (прототип) ajax, сценарию, который позже вызывает эту функцию jsonResponse, о которой я упоминал ранее …

  new Ajax.Request('URL', { method:'post', onSuccess: function(transport){ res = transport.responseJSON; $('actionInformation').update(res.username); }, onFailure: function(){ alert('Something went wrong...') } }); 

Это код jscript, обратите внимание на res.msg, здесь мы можем работать с массивом. Но, не забудьте отправить ответ в формате JSON на вашем PHP, используя функцию jsonResponse, его легко использовать, например, ваша php-функция может выглядеть примерно так:

 function ajax_get_user() { $userName = 'Adrian'; $active = 1; jsonResponse(array('username' => $username, 'active' = $active)); } 

Позже вы можете легко, res.username, res.active.

Я думаю, что это должно быть!