Подтвердить что ты не робот

Как вернуть массив из вызова AJAX?

Я ищу лучшее решение для создания AJAX-вызова с помощью jQuery, когда PHP файл возвращает массив, и выйдет он на стороне клиента как массив Javascript. Вот что я делаю:

Файл PHP (Example.php):

<?php
    $id_numbers = array('NES-ZL','NES-AL','SNS-ZL');

    for ($i=0; $i<count($the_array); $i++){
        echo $id_numbers[$i];
        echo '|';
    }
?>

Файл JS:

id_numbers = new Array();
$.ajax({
    url:"Example.php",
    type:"POST",
    success:function(msg){
        id_numbers = msg.split('|');
    }
});

Мой текущий метод просто слишком запутан для моего вкуса.

Что я хотел бы сделать, так это просто

return $id_numbers;

на стороне PHP и непосредственно перевести его в массив Javascript после вызова AJAX.

Идеи, кто-нибудь?

4b9b3361

Ответ 1

Используйте JSON для переноса типов данных (массивов и объектов) между клиентом и сервером.

В PHP:

В JavaScript:

PHP:

echo json_encode($id_numbers);

JavaScript:

id_numbers = JSON.parse(msg);

Как упоминал Вольфганг, вы можете дать четвертый параметр jQuery для автоматического декодирования JSON для вас.

id_numbers = new Array();
$.ajax({
    url:"Example.php",
    type:"POST",
    success:function(msg){
        id_numbers = msg;
    },
    dataType:"json"
});

Ответ 2

Посмотрите json_encode() в PHP. Вы можете получить $.ajax, чтобы распознать это с помощью параметра dataType: "json".

Ответ 3

@Xeon06, приятно, но точно так же, как fyi для тех, кто читал эту тему и пробовал, как я... при возврате массива из php = > json_encode($theArray). преобразует в строку, которая мне нелегко манипулировать esp для таких мягких пользователей, как я.

Внутри js вы пытаетесь получить значения массива и/или ключи массива u r лучше, используя JSON.parse, как в var jsArray = JSON.parse(data), где data - это возвращаемый массив из php. строка, закодированная json, преобразуется в объект js, который теперь можно легко манипулировать.

например. foo = {один: 1, два: 2, три: 3} - получил после JSON.parse

for (key in foo){ console.log("foo["+ key +"]="+ foo[key]) } - печатает на консоли firebug. вуаля!

Ответ 4

Посмотрите json_encode (http://php.net/manual/en/function.json-encode.php). Он доступен с PHP 5.2. Используйте параметр dataType: 'json' для его анализа. Тогда у вас будет объект как первый аргумент. Для получения дополнительной информации см. Документацию jQuery: http://api.jquery.com/jQuery.ajax/

Ответ 5

Php имеет супер-сексуальную функцию для этого, просто передайте ему массив:

$json = json_encode($var);

$.ajax({
url:"Example.php",
type:"POST",
dataType : "json",
success:function(msg){
    console.info(msg);
}
});

Примеры:)