Я отправляю запрос ajax с двумя значениями post, первый – это «действие», определяющее, какие действия должен выполнять мой php-скрипт, другой – «id», который является идентификатором пользователя, которому он должен разбирать скрипт.
Сервер возвращает 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?
Вам нужно позвонить
$.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
переданный тип 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 с помощью шаблонов (таких как Handlebars js ).
Подключите контроллер javascript clientide и контроллер php-серверов, используя коды отправки и получения с привязанными данными. Таким образом, ваш php-код может отправлять в качестве ответной функциональной дельта для js recepient / listenener
см. 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 (Измените dataType от json до html или просто не устанавливайте его. JQuery выяснит это)
$.ajax({ type: "POST", dataType: "html", url: "main.php", data: "action=loadall&id=" + id, success: function(response){ $('#main').html(response); } });