当前位置: 首页 > 面试题库 >

XMLHttpRequest没有添加标题-“ X-Requested-With:XMLHttpRequest”

宰父涵忍
2023-03-14
问题内容

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

由于进行了此更改,因此MVC操作方法不再将其视为ajax请求。使用Fiddler2,我注意到它不再向请求添加“ X-Requested-
With:XMLHttpRequest”,并且我认为这是问题所在。

我尝试发送的html" target="_blank">表单中没有文件输入,只有普通的文本框等,但是我试图使该方法通用以同时处理这两种情况。以下是我用来发送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()。文件



 类似资料:
  • 问题内容: 我使用的是第三方库,其中包含。 这绕过了我的CSRF保护,并被我的rails服务器击落。 有没有一种方法可以在实例化时向所有实例实例全局添加预定义的CSRF令牌()? 问题答案: 我建议拦截对方法的调用: 这不会在实例化时添加标头,而是在发送请求之前添加标头。您 也可以 截取对的调用,但这不会有帮助,因为您需要等待添加标头直到被调用。 您可能还需要对请求的目标URL进行测试,以便仅在调

  • 我使用的是一个第三方库,它生成了一个原始的和。 这绕过了我的CSRF保护,并被我的rails服务器击落。 是否有方法在实例化时向的所有实例全局添加预定义的CSRF令牌()?

  • 问题内容: 在 **http://www.a.com/service.asmx 上创建一个Web服务,并从 **http://www.b.com 向其发送跨域ajax请求。检查 Firebug 或 Live HTTP Headers中的标题 ,或您想要的任何其他插件。 在请求标头中没有 X-Requested-With HTTP标头字段的踪迹。 但是,如果您从同一域向同一服务发送ajax请求(例如

  • 问题内容: jQuery和其他框架添加以下标头: X-Requested-With:XMLHttpRequest 为什么需要这个?为什么服务器要对AJAX请求与常规请求区别对待? 更新 :我刚刚找到了一个使用此标头的真实示例:https : //core.spreedly.com/manual/payment-methods/adding- with-js 。如果要求付款处理器不使用AJAX,则完

  • 问题内容: 我正在使用jQuery ajaxForms插件使ajax提交到我的CakePHP应用。 Cake的RequestHandler通过查看“ X-Requested- With”标头来检测ajax请求,但forms插件似乎并未对其进行设置。或jQuery在使用插件时未设置它。 我已经尝试了几件事, 在主要的onload函数中,我添加了: 在插件代码中,我在实际的ajax调用之前添加了此代码

  • 问题内容: 我正在为应用设置身份验证。在发出登录请求后,将发送一个JSON Web令牌作为响应。我可以通过Ajax将其附加到标题。问题是登录后使用window.location.pathname进行重定向时,因为它不是Ajax请求,所以它没有在标头上附加令牌。我该如何解决? 问题答案: 简短的答案是:您不能使用设置HTTP标头。