这怎么可能是Request.IsAjaxRequest()是从Firefox真实的,但使用jQuery后,当从IE假
-
24-09-2019 - |
题
我试图测试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());
}
解决方案
我确认您的代码(其中我无法找到一个错误)没有发送与jQuery 1.3.2和IE 6.0.2900.5512一个XHR请求; jQuery的升级到下一个可用的版本,1.4.0,修复破碎的行为。使用AJAX 1.4.0(或以上),IE的帖子的形式,并发送所述X要求-随着IsAjaxRequest()
到工作所需标题。您是否能够升级jQuery的?我没有任何运气找到这个特定的错误/修复,但如果你需要坚持使用1.3.2,我可以继续挖掘。
其他提示
添加以下代码,后右jQuery代码:
jQuery.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}
});
有强制浏览器添加 X-请求-用的每AJAX请求头。
值得关注的是使用jQuery的最新版本被推荐为有许多错误修复。
如果它没有帮助,请检查与请求的的Fiddler 以查看是否IE发送报头或不
它看起来像有一个JavaScript错误在IE从异步调用动作防止发生。验证HTTP头X-Requested-With: XMLHttpRequest
的存在而调试。
不隶属于 StackOverflow