为什么ajaxSubmit没有使用X-Requested-With = XMLHttpRequest请求头发送正确的ajax请求

时间:2011-01-07 20:36:34

标签: javascript jquery ajax jquery-ui

我已经google了很多但我找不到任何解决方案

我正在使用jQueryUI DialogajaxSubmit通过模式对话框和Ajax发送数据(文件和其他)。

我的问题非常简单:数据正确发送到服务器但不通过ajax发送,即没有请求标头属性X-Requested-With=XMLHttpRequest

那我该怎么办?或者有任何已知的问题?

以下是我的代码片段。

$('#photo-dlg').dialog({
  modal: true,
  open: function() { $(this).load("/mywebsite/mydialog");} 
  //importing <form id="formid" method="post" name="updatePhoto" enctype="multipart/form-data"> ...
  buttons: { 
    'cancel' : function() {$(this).dialog('close');}, 
    'submit' : function() { 
               $('#formid').ajaxSubmit({
                   dataType: "json", 
                   success: function (data) { $('#photo-dlg').dialog('close'); })  
               });}
  });

顺便说一下,我尝试了以下选项:

headers: {"X-Requested-With":"XMLHttpRequest"} //OR
data: {"X-Requested-With":"XMLHttpRequest"} //OR
beforeSend: function(xhrObj) {xhrObj.setRequestHeader("X-Requested-With", "XMLHttpRequest")}

没有任何成功

更新
您可以将以下代码复制/粘贴到html页面中,然后通过FireBug自行尝试(=&gt;没有X-Requested-With标题)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js"></script>
    <script type="text/javascript" src="http://d23fbyuk1dcxop.cloudfront.net/js/jquery/jquery.multiselect-1.8.min.gz.js"></script>
    <script type="text/javascript" src="http://d23fbyuk1dcxop.cloudfront.net/js/jquery/jquery.form.min.gz.js"></script>
</head>
<body>
<div id="photo-dlg2">
    <form id="updatePhoto2" enctype="multipart/form-data" elementid="updatePhoto2" name="updatePhoto2" method="POST"
          action="http://mywebsite.com/article/updatePhoto">
        <input type="file" size="50" class="easyinput" id="photoFile" name="photoFile">
    </form>
</div>
<script type="text/javascript">
    $('#photo-dlg2').dialog({
        modal: true,
        buttons: { 'submit' : function() {
            $('#updatePhoto2').ajaxSubmit({
                dataType: "json",
                success: function (data) {
                    alert(data['status']);
                }
            });
        }}
    });
</script>
</body>
</html>

5 个答案:

答案 0 :(得分:4)

我已经被这个错误所击中了。我知道你能感受到多么孤独: - )

我一直在寻找几个星期。有时我有XMLHttpRequest标题,有时候我没有。所以这可能不是一个明确的解决方案,但这对我有用。

我像你一样测试了标题,我测试了ajax设置也在改变。直到...完整的JavaScript语法清理我的代码没有任何工作。经过一些IE6测试后,似乎有些';' (或者它'','?没有 - 在我写的时候闭嘴 - 它是';')在某些关键点丢失了,并且任何现代浏览器都没有受到影响......或者至少看起来它们没有受到影响。 IE6完全崩溃所以我们发现了语法问题(顺便说一下 - 或者可能通过二分法会更加真实)。

我记不清楚了(在长篇链接括号结尾处的情节之间是什么?),但是在我受到这个错误影响的每个地方,我都会默默地忽略一些语法错误。肯定jQuery变坏了(就像ajax设置被清除一样)。这是我生命中唯一一次得到IE6错误的时候: - )

答案 1 :(得分:3)

好的,我花了一段时间,但我终于找到了答案:没有解决方案!

实际上似乎是jquery表单插件cannot upload files using the browser's XMLHttpRequest object

实际上我已尝试在插件网站上给出示例,实际上,如果您在表单中添加<input type="file" name="photoFile">,标题X-Requested-With = XMLHttpRequest永远不会发送到服务器,而您的服务器无法检测到通常的方法,如果您的请求是Ajax请求。

很高兴知道并感谢您的帮助。

答案 2 :(得分:2)

这可能有助于某人。

我想我知道问题何时发生。当您使用IE 7,8或9(显然......),并且您尝试使用ajaxform上传文件时(我想同样的事情发生在ajaxsubmit),这是问题发生了。

IE不会发送X-Requested-With=XMLHttpRequest标头。 Chrome会发送此标题,也会发送Firefox。

答案 3 :(得分:0)

在Javascript中定义对象时,需要注意逗号。你的代码遗漏了一个。

$('#photo-dlg').dialog({
  modal: true,
  open: function() { $(this).load("/mywebsite/mydialog");}, // you had a missing comma here.
  //importing <form id="formid" method="post" name="updatePhoto" enctype="multipart/form-data"> ...
  buttons: { 
    'cancel' : function() {$(this).dialog('close');}, 
    'submit' : function() { 
               $('#formid').ajaxSubmit({
                   dataType: "json", 
                   success: function (data) { $('#photo-dlg').dialog('close'); })  
               });}
  });

但这可能不是你问题的原因。

答案 4 :(得分:0)

当我不小心在页面上放置了两个具有相同ID的表单时,IE 10停止了我的http标头(X-Requested-With = XMLHttpRequest)。

我知道这已经过时了,但是当我在搜索问题时,谷歌的前五名搜索结果就出现了。