我有一个 ajax 调用,之前我使用 jQuery.ajax() 向 MVC action 发送请求,一切都正常。但是由于某些表单具有文件控件,因此我将它从使用 jQuery.ajax() 更改为使用 XMLHttpRequest,并使用 HTML5 File API 发送请求。
自从进行了这个更改后,MVC action 方法不再将其视为 ajax 请求。通过使用 Fiddler2,我注意到它不再将 "X-Requested-With: XMLHttpRequest" 添加到请求中,我认为这就是问题所在。
我试图保持方法的通用性以处理两种情况(有/无文件输入),但我尝试发送的表单中没有文件输入,只有普通文本框等。以下是我用于发送 ajax 请求的代码:
自从进行了这个更改后,MVC action 方法不再将其视为 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);
这段代码是在我遇到问题后由Darin Dimitrov提供解决方案,并让我能够通过ajax发送文件输入的。
你有什么想法,为什么这个请求不会为ajax调用发送头信息?