2011-01-07 46 views
3

我用Google搜索了很多,但我没有找到任何解决方案为什么ajaxSubmit会不会发送正确的Ajax请求使用X-要求,随着= XMLHttpRequest的请求头

我使用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")} 

没有任何成功

UPDATE:
您可以复制/粘贴下面的代码到HTML页面,并通过尝试你自己通过FireBug(=> No X-Requested-With header)

<!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> 
+0

什么是像萤火虫,LiveHTTPHeaders告诉你的工具? – Anders 2011-01-07 20:39:42

+1

我尝试使用example @ http://jquery.malsup.com/form/#ajaxSubmit,我可以看到发送的头文件(用firebug来检查它)。 – Chandu 2011-01-07 20:41:37

+0

也许你应该发布你用来寻找标题;问题可能在那里,而不是在你的页面代码中。 – Pointy 2011-01-07 21:01:58

回答

3

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

实际上似乎jQuery的形式插件cannot upload files using the browser's XMLHttpRequest object

其实我已经尝试过的插件网站上给出的例子,事实上,如果你添加一个<input type="file" name="photoFile">到您的窗体,头X-要求,随着=的XMLHttpRequest永远不会发送到服务器,如果您的请求是Ajax请求,您的服务器将无法使用常规方法进行检测。

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

4

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

我一直在寻找数周。有时我有XMLHttpRequest标头,有时候我没有。所以这可能不是一个明确的解决方案,但对我而言。

我测试了和你一样的标题,并测试了Ajax设置。没有工作,直到...一个完整的JavaScript语法清理我的代码。经过一些IE6测试后,似乎有一些';' (或者是'','?不 - 闭嘴,当我写 - 这是';')在一些关键点失踪,并且任何现代浏览器都没有受到影响......或者至少看起来它们没有受到影响。 IE6被彻底打破了,所以我们发现了语法问题(顺便说一下 - 或者二分法可能更现实)。

我不记得确切(在括号的长链结束时是否在情节之间......),但是在受此错误影响的每个地方,我都有一些语法错误被默默忽略。当然,jQuery越来越差了(就好像ajax设置被清除了一样)。这是我生命中唯一一次我很高兴得到一个IE6错误:-)

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'); }) 
       });} 
    }); 

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

2

这可能有助于某人。

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

IE不发送X-Requested-With=XMLHttpRequest标题。 Chrome确实发送了这个头文件,而Firefox也是如此。

0

当我意外地在页面上放置了2个具有相同ID的表单时,IE 10将我的http标题(X-Requested-With = XMLHttpRequest)留下。

我知道这是旧的,但当我在这个问题上搜索时,它出现在谷歌的前5名的结果。