JQuery ajax-запрос с json-ответом, как?
Я отправляю запрос ajax с двумя значениями post, первый - это "действие", определяющее, какие действия должен обрабатывать мой PHP скрипт, другой - "id", который является идентификатором пользователя, которому он должен разбираться script для.
Сервер возвращает 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?
Ответы
Ответ 1
Вам нужно позвонить
$.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.
Ответ 2
Во-первых, это поможет, если вы установите заголовки вашего 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).
Ответ 3
Подключите контроллер javascript clientide и контроллер сервера php, используя коды отправки и получения с привязанными данными. Таким образом, ваш php-код может отправлять как функциональную дельта-функцию ответа для js recepient/listenener
см. https://github.com/ArtNazarov/LazyJs
Извините за мой плохой английский
Ответ 4
Поскольку вы создаете разметку в виде строки, вы не конвертируете ее в json. Просто отправьте его, поскольку он объединяет все элементы массива с помощью метода implode
. Попробуйте это.
Изменение PHP
$response = array();
$response[] = "<a href=''>link</a>";
$response[] = 1;
echo implode("", $response);//<-----Combine array items into single string
JS (Измените dataType от json до html или просто не устанавливайте его. jQuery выяснит это)
$.ajax({
type: "POST",
dataType: "html",
url: "main.php",
data: "action=loadall&id=" + id,
success: function(response){
$('#main').html(response);
}
});