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?

Author: jherax, 2012-02-01

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.

 39
Author: Guilherme, 2015-02-11 16:21:04

Во-первых, это поможет, если вы настроите заголовки вашего 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).

 26
Author: sgb, 2012-02-01 15:50:38

Подключите свой клиентский контроллер javascript и серверный контроллер php, используя отправку и получение кодов операций с привязанными данными. Таким образом, ваш php-код может отправлять в качестве ответа функциональную дельту для получателя/слушателя js

См. https://github.com/ArtNazarov/LazyJs

Извините за мой плохой английский

 2
Author: ArtNazarov, 2014-02-19 10:31:30

Поскольку вы создаете разметку в виде строки, вам не нужно преобразовывать ее в 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);
   }
});
 1
Author: ShankarSangoli, 2012-02-01 15:46:16