Как вернуть массив из вызова 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.
Идеи, кто-нибудь?
Ответы
Ответ 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);
}
});
Примеры:)