Извиняюсь, если это объяснение непонятно, мне тоже трудно понять. Как я могу использовать 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.
Я думаю, что это должно быть!