Как передать массив с помощью 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 в этом контексте?

Author: Joe W, 2011-09-01

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
 21
Author: Richard, 2011-08-31 20:46:39

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

 echo json_encode($result); 

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

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

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

 9
Author: bboydev, 2012-10-19 14:48:09

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
    }
});
 2
Author: pimvdb, 2011-08-31 20:38:47

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

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

Или вы можете просто работать с самим json по любой причине, по которой вам нужен массив?

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

 0
Author: Baz1nga, 2011-08-31 20:42:23

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.

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

 0
Author: Adrian, 2011-08-31 20:55:23