AJAX — отправка JSON без URLencoding

ЦЕЛЬ И ПРЕДПОСЫЛКИ

Сравните два образца текста. Эти текстовые образцы являются описаниями продуктов. Образец 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
        });

Если вы хотите отправить JSON на сервер, измените свойство $.ajax()contentType на: application/json. Также обратите внимание, что я считаю, что PHP не будет заполнять данные в $_POST superglobal. Вам придется прочитать его со стандартного ввода: $data = file_get_contents("php://input");...

War10ck 12.06.2019 15:38
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
1
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из 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, которые доступны.

Другие вопросы по теме