私はjvery.ajax()を使用してmvcアクションを要求するajaxコールを持っています。これはすべてうまくいきました。しかし、ファイルコントロールを持ついくつかのフォームのために、私はjQuery.ajax()を使用してXMLHttpRequestを使用してHTML5 File APIを使用してそれを送信するように変更しました。XMLHttpRequestはヘッダーを追加しません - "X-Requested-With:XMLHttpRequest"
MVCアクションメソッドはこの変更を行って以来、もはやそれをajaxリクエストとみなしません。 Fiddler2を使用して、私はもはや "X-Requested-With:XMLHttpRequest"をリクエストに追加しなくなり、これが問題であると考えています。
送信しようとしているフォームには、ファイル入力がありません。通常のテキストボックスなどですが、両方を処理するために汎用メソッドを保持しようとしていました。以下は、私は、AJAXリクエストを送信するために使用していたコードです:
// get the edit tender form
var $Form = $Button.closest('form');
var Url = $Form.attr('action');
var AjaxRequestObject = new XMLHttpRequest();
var FormDataToSend = new FormData();
$Form.find(':input').each(function() {
if ($(this).is('input[type="file"]')) {
var files = $(this)[0].files;
if (files.length > 0) {
FormDataToSend.append(this.name, files[0]);
}
} else {
FormDataToSend.append(this.name, $(this).val());
}
});
AjaxRequestObject.open('POST', Url, true);
AjaxRequestObject.onreadystatechange = function() {
if (AjaxRequestObject.readyState == 4) {
// handle response.
if (AjaxRequestObject.status == 200) {
if (!AjaxErrorExists(AjaxRequestObject.responseText,)) {
alert("success");
console.log(AjaxRequestObject.responseText);
}
else {
alert('failure');
}
}
else {
alert('failure');
}
}
};
AjaxRequestObject.send(FormDataToSend);
このコードはダーリンディミトロフが解決策を提供し、私が持っていた問題で、以下の提供されたので、私は、Ajaxによって、ファイルの入力を送信することができます。
このリクエストがajaxコールのヘッダーを送信しない理由は何ですか?
スーパー。送信直前に、次のように追加しました: "AjaxRequestObject.setRequestHeader( 'X-Requested-With'、 'XMLHttpRequest');"私はそれが働いたと思う。 – eyeballpaul