ЦЕЛЬ И ПРЕДПОСЫЛКИ
Сравните два образца текста. Эти текстовые образцы являются описаниями продуктов. Образец 1 взят из текстовой области формы. Образец 1 отправляется через AJAX в другой файл для сравнения с образцом 2, который берется из базы данных.
Я пытаюсь отправить как объект JSON, потому что я предполагал, что это позволит мне обойти отправку URL-кодированных данных в простом запросе POST/GET.
ПРОБЛЕМА
Когда я отправляю образец 1 через AJAX в объекте JSON, он кодируется URL-адресом с помощью +
для пробелов и т. д. Мне нужно, чтобы текст был отправлен «как есть», чтобы его можно было сравнить. Декодирование URL не будет работать, так как действительно могут быть +
и другие символы, которые являются частью истинного примера 1.
ВОПРОС
Как отправить образец 1 без URL-кодирования данных?
КОД
// we need the product id and description
var pid = $("input[name='pid']").val();
var descr = $("textarea[name='descr']").val();
// put in a json object so we can see the real data
var $obj = {
"pid": pid,
"descr": descr // Sample 1
}
// make the call and return the promise
return $.ajax({
type: 'POST',
url: 'request_file.php',
dataType: "json",
data: $obj
});
Из jquery документы для $.ajax
API,
contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')
Таким образом, по умолчанию он будет отправлен только в виде URL-адреса. Обновите вызов AJAX следующим образом, установив правильный параметр.
return $.ajax({
type: 'POST',
contentType :'application/json',
url: 'request_file.php',
dataType: "json",
data: $obj
});
Параметр contentType
обычно принимает в качестве значения тип MIME. Всегда нужно устанавливать правильный тип MIME для варианта использования при отправке запроса, а также использовать тип MIME такой же для чтения данных из запроса в бэкэнде.
Вы можете ссылаться на здесь для различных типов MIME, которые доступны.
Если вы хотите отправить JSON на сервер, измените свойство
$.ajax()
contentType
на:application/json
. Также обратите внимание, что я считаю, что PHP не будет заполнять данные в$_POST
superglobal. Вам придется прочитать его со стандартного ввода:$data = file_get_contents("php://input");
...