Заголовок X-Requested-With не установлен в плагине jquery ajaxForm - PullRequest
14 голосов
/ 04 декабря 2009

Я использую плагин jQuery ajaxForms для отправки ajax в мое приложение 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-вызов, устанавливает заголовок ...

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

Ответы [ 5 ]

12 голосов
/ 04 декабря 2009

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

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

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

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

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

<input type="hidden" name="X_REQUESTED_WITH" value="XMLHttpRequest" />
3 голосов
/ 03 апреля 2012

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

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

2 голосов
/ 04 декабря 2009

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

На SO есть интересный вопрос о том, что это невозможно, только через хак с iFrame. Таким образом, фактический вызов ajax не выполняется ...

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

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

0 голосов
/ 01 ноября 2012

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

0 голосов
/ 05 ноября 2010

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

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

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

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

Эти браузеры (не Firefox) добавили бы это в заголовок. Таким образом, в действительности, заголовок был установлен как «XMLHttpRequest, XMLHttpRequest»

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...