Как передать массив с помощью 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);
}
И функция PHP getPhotos выглядит так:
<?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 в этом контексте?
5 answers
Попробуйте:
$.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 правило, когда вам это нужно.
Я тоже недавно узнал эту классную вещь! Вот как вы это делаете:
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.active.
Я думаю, что это должно сработать!