X-Requested-С заголовком не установлен в jquery ajaxForm плагин

Я использую jQuery ajaxForms плагин, чтобы сделать ajax submit моим приложением CakePHP.

Cake RequestHandler обнаруживает запросы ajax, просматривая заголовок "X-Requested-With", но плагин форм не устанавливает его. Или jQuery не устанавливает его при использовании плагина.

Я пробовал несколько вещей,

в основной функции загрузки я добавлено:

$.ajaxSetup({
    headers: {"X-Requested-With":"XMLHttpRequest"}
});

В коде плагина я добавил это прямо перед фактическим вызовом ajax:

options.beforeSend = function(xhr) {
    xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest");
};

Выполняя регулярный вызов ajax, устанавливает заголовок...

Может ли кто-нибудь сказать мне, что происходит или что самое важное, как я могу это исправить?

Ответы

Ответ 1

@Ники Де Маейер отвечает на свой вопрос

На самом деле вам не нужно делать это самостоятельно (добавление скрытого поля ввода).

AFAIK вы можете просто передать такие данные в плагин ajaxForms в объекте options

$('#myForm1').ajaxForm({data:{"X_REQUESTED_WITH":"XMLHttpRequest"}});

Должен автоматически (в скрытом случае загрузки файла iframe) добавить такой ввод в свою форму при отправке

<input type="hidden" name="X_REQUESTED_WITH" value="XMLHttpRequest" />

Ответ 2

Новая разработка:

На данный момент плагин jquery.form теперь поддерживает многопользовательскую загрузку (включая файлы) очень хорошо, совместимым с кросс-браузером способом, и устанавливает заголовок X-Requested-With. У меня возникла проблема с более старой версией jquery.form и обновление до 3.02 исправлено!

Ответ 3

Переходя от комментария petersendidit, я пошел искать вопросы по загрузке ajax/file.

там интересный вопрос на fooobar.com/questions/294/..., заявляющий, что это невозможно, только через взломать iFrame. Поэтому никакого действительного вызова ajax не производится...

так как моя форма является многочастной с загрузкой файла, плагин использует iFrametechnique вместо обычного вызова ajax...

Чтобы решить это, чтобы знать, что это должно напоминать вызов ajax, я добавлю скрытое поле ввода в многочастные формы...

Ответ 4

Мне просто пришлось решить проблему сегодня, которая была похожа на это, и придумала другое решение. Проблема возникла с помощью Chrome, Safari и IE, где заголовок (который я проверял на PHP через $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') не соответствовал.

Как было указано в предыдущем ответе, при использовании jQuery ajax-функций этот заголовок уже будет установлен jQuery.

В указанных выше браузерах при использовании:

options.beforeSend = function(xhr) {
    xhr.setRequestHeader("X_REQUESTED_WITH", "XMLHttpRequest");
};

Эти браузеры (а не Firefox) добавят это в заголовок. Поэтому на самом деле заголовок был задан как: "XMLHttpRequest, XMLHttpRequest"

В нижней строке, не устанавливайте этот заголовок при использовании функций jQuery AJAX. Надеюсь, это решит головную боль кому-то.

Ответ 5

Я обнаружил, что проблема заключается в отсутствии поддержки загрузки файлов в более старых версиях плагина. Когда я удалил входные файлы, проблема исчезла.