我正在尝试测试jquery帖子。我发布了一个表单,想要在ajax中更新并用div上的成功表单替换(看起来像一个常见的用例)。
以下代码在Firefox中运行良好,但在IE中运行不正常。
一个问题是来自Firefox Request.IsAjaxRequest()是真的但是来自IE, Request.IsAjaxRequest()返回false
注意:我在我的控制器操作中放入Thread.Sleep作为测试,以确保我能看到最新情况。
这是我的观看代码:
<div id="contact">
<form action="/Tracker/Add" method="post">
<fieldset id="inputbox">
<p>
<label>Today's number</label> <input class="inputText" id="weight" name="weight" type="text" value="208" /></p>
<p><label>Today's Date</label> <input class="inputText" id="datepicker" name="date" type="text" value="03-Mar-2010" /></p>
<p><input type="submit" value="Enter" /></p>
</fieldset>
这里是javascript / jquery代码:
<script type="text/javascript" src="../../Scripts/jquery/1.3.2/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#contact form').live('submit', function() {
//$("#Loading").fadeIn(); //show when submitting
$.post($(this).attr('action'), $(this).serialize(), function(data) {
$("#contact").replaceWith($(data));
});
return false;
});
});
</script>
这是我的控制器动作:
public ActionResult Add()
{
if (if (Request.IsAjaxRequest())
{
//firefox will hit this but IE wont
}
Thread.Sleep(5000);
return PartialView("EntryView", new MyViewModel());
}
答案 0 :(得分:8)
我验证了你的代码(我无法找到错误)没有发送带有jQuery 1.3.2和IE 6.0.2900.5512的XHR请求;将jQuery升级到下一个可用版本1.4.0,修复了损坏的行为。使用1.4.0(及更高版本),IE使用AJAX发布表单并发送IsAjaxRequest()
所需的X-Requested-With标头。你能升级jQuery吗?我没有找到具体的错误/解决方法,但如果你需要坚持使用1.3.2,我可以继续挖掘。
答案 1 :(得分:3)
在jQuery代码之后添加以下代码:
jQuery.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}
});
它强制浏览器为每个AJAX请求添加 X-Requested-With 标头。
值得注意的是,建议使用最新版本的jQuery,因为有很多错误修复。
如果没有帮助,请用 Fiddler 检查请求,看IE是否发送标题。
答案 2 :(得分:2)
看起来IE中发生了一个javascript错误,导致无法异步调用该操作。在调试时验证是否存在HTTP标头X-Requested-With: XMLHttpRequest
。