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
Я обнаружил, что проблема заключается в отсутствии поддержки загрузки файлов в более старых версиях плагина. Когда я удалил входные файлы, проблема исчезла.