javascript – XMLHttpRequest不添加标题 – “X请求 – 与:XMLHttpRequest”

我有一个ajax调用,我使用jQuery.ajax()向mvc操作发出请求.这一切都很好.但是由于某些形式具有文件控件,我将其从使用jQuery.ajax()更改为使用 XMLHttpRequest使用 HTML5 File API发送它.

由于进行此更改,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);

代码是在Darin Dimitrov提供了解决方案的问题之后提供的,所以我可以通过ajax发送文件输入.

任何想法为什么这个请求不会发送一个ajax调用的头?

解决方法

X-Requested-With由jQuery自动添加.您可以使用AjaxRequestObject.setRequestHeader()轻松添加它. Docs

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...