Подтвердить что ты не робот

Настройка 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. Это просто не приведет к увольнению запроса.

4b9b3361

Ответ 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
    ...
});