我已经google了很多但我找不到任何解决方案
我正在使用jQueryUI Dialog和ajaxSubmit通过模式对话框和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>
答案 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)。
我知道这已经过时了,但是当我在搜索问题时,谷歌的前五名搜索结果就出现了。