jQuery ajax-запрос с ответом json, как это сделать?
Я отправляю запрос ajax с 2 значениями post, первое - "действие", которое определяет, какие действия должен анализировать мой php-скрипт, другое - "идентификатор", который является идентификатором пользователя, для которого он должен анализировать скрипт.
Сервер возвращает 6 значений внутри массива(), а затем кодируется в JSON с помощью функции PHP: json_encode();
Некоторые из моих ответов являются HTML, но когда я кодирую их в JSON, они ускользают "/"
, поэтому они становятся "\/"
как мне отключить это?
также, когда я не знаю, как отобразите это в jQuery, когда я получу ответ сервера, я просто подумал, что, поместив все это в div, я просто отобразил бы числа и HTML-коды, которые я просил, но он отображает массив так, как он закодирован в PHP.
PHP
$response = array();
$response[] = "<a href=''>link</a>";
$response[] = 1;
echo json_encode($response);
jQuery (запрос):
$.ajax({
type: "POST",
dataType: "json",
url: "main.php",
data: "action=loadall&id=" + id,
complete: function(data) {
$('#main').html(data.responseText);
}
});
Как мне сделать это в рабочем JSON?
4 answers
Вам нужно позвонить в
$.parseJSON();
Например:
...
success: function(data){
var json = $.parseJSON(data); // create an object with the key of the array
alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>";
},
error: function(data){
var json = $.parseJSON(data);
alert(json.error);
} ...
Смотрите это в http://api.jquery.com/jQuery.parseJSON/
Если у вас все еще есть проблема с косыми чертами: поиск security.magicquotes.disabling.php или: function.stripslashes.php
Примечание:
Этот ответ здесь предназначен для тех, кто пытается использовать $.ajax
со свойством dataType
, установленным в json
, и даже у них неправильный тип ответа. Определение header('Content-type: application/json');
на сервере может исправить проблему, но если вы возвращаете text/html
или любой другой тип, метод $.ajax
должен преобразовать его в json
. Я провожу тест с более старыми версиями jQuery и только после версии 1.4.4
$.ajax
принудительно преобразую любой тип контента в dataType
пройденный. Поэтому, если у вас возникла эта проблема, попробуйте обновить версию jQuery.
Во-первых, это поможет, если вы настроите заголовки вашего PHP для обслуживания JSON:
header('Content-type: application/json');
Во-вторых, это поможет настроить ваш вызов ajax:
$.ajax({
url: "main.php",
type: "POST",
dataType: "json",
data: {"action": "loadall", "id": id},
success: function(data){
console.log(data);
},
error: function(error){
console.log("Error:");
console.log(error);
}
});
В случае успеха полученный вами ответ должен быть принят как истинный JSON, и объект должен быть зарегистрирован в консоли.
ПРИМЕЧАНИЕ: Если вы хотите использовать чистый html, вы можете рассмотреть возможность использования другого метода для JSON, но я лично рекомендую использовать JSON и отображать его в html с помощью шаблонов (таких как Руль js).
Подключите свой клиентский контроллер javascript и серверный контроллер php, используя отправку и получение кодов операций с привязанными данными. Таким образом, ваш php-код может отправлять в качестве ответа функциональную дельту для получателя/слушателя js
См. https://github.com/ArtNazarov/LazyJs
Извините за мой плохой английский
Поскольку вы создаете разметку в виде строки, вам не нужно преобразовывать ее в json. Просто отправьте его так, как он объединяет все элементы массива, используя метод implode
. Попробуй это.
Изменение PHP
$response = array();
$response[] = "<a href=''>link</a>";
$response[] = 1;
echo implode("", $response);//<-----Combine array items into single string
JS (Измените тип данных с json на html или просто не устанавливайте его, jQuery разберется с этим)
$.ajax({
type: "POST",
dataType: "html",
url: "main.php",
data: "action=loadall&id=" + id,
success: function(response){
$('#main').html(response);
}
});