在使用jquery post时,如何从firefox获取Request.IsAjaxRequest(),从IE返回false

时间:2010-03-03 14:13:22

标签: jquery asp.net-mvc blockui jquery-blockui

我正在尝试测试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());
    }

3 个答案:

答案 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