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);
   }
});