Настройка processData на false в jQuery прерывает мой запрос AJAX
Я уже давно искал Google и могу найти только то, что делает processData: false
. Я не могу найти тех, кто испытал эту проблему.
Я передаю JSON обратно на сервер и не хочу, чтобы jQuery автоматически преобразовывал данные в строку запроса, поэтому я устанавливаю processData в false. Я могу увидеть, как запускается запрос, если я извлекаю processData, но как только я его вставляю, я не вижу никаких запросов (используя Firebug и инструменты Chrome dev).
$.ajax({
url: myUrl,
type: "POST",
data: {foo: "bar"},
processData: false,
contentType: 'application/json'
});
Запрос, который я изначально делал, был немного более сложным, чем это, но я упростил его, чтобы попытаться сузить проблему, но этот простой кусок кода тоже не работает (опять же, он работает, если я прокомментирую processData). Кроме того, я не вижу никаких ошибок JavaScript в консоли.
Изменить
Для будущих поисковиков в Интернете. Как указывал lonesomeday, jQuery не будет вызывать никаких ошибок, если вы предоставите либо JS-объект, либо неверно отформатированную строку JSON. Это просто не приведет к увольнению запроса.
Ответы
Ответ 1
Вы хотите передать данные как JSON. Вы передаете объект Javascript. JSON - это способ сериализации объектов Javascript для строк, чтобы их можно было передавать без проблем с совместимостью.
Вы действительно хотите передать JSON в строку:
$.ajax({
url: myUrl,
type: "POST",
data: '{"foo": "bar"}',
processData: false,
contentType: 'application/json'
});
Ответ 2
Собственно, processData
по умолчанию предполагает, что data
передано является объектом и отправляет его как application/x-www-form-urlencoded
.
Подводя итог всему сказанному @lonesomeday и @vsm, чтобы отправить сырой JSON (что другое из данных формы) вам необходимо:
$.ajax({
url: 'http://here-i.am/send-me/an/angel', // Determining far end
data: JSON.stringify({foo: "bar"}), // Obtaining proper JSON string from data object
processData: false, // Preventing default data parse behavior
contentType: "application/json" // Setting proper `ContentType` for our data
...
});