2

我正在尝试测试 jquery 帖子。我正在发布一个表单,并希望在 ajax 中更新并用 div 上的成功表单替换(似乎是一个常见的用例)。

以下代码在 Firefox 中运行良好,但在 IE 中运行良好。

一个问题是,来自 Firefox 的Request.IsAjaxRequest()为 true,但来自 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());
    }
4

3 回答 3

8

我验证了您的代码(我在其中找不到错误)没有使用 jQuery 1.3.2 和 IE 6.0.2900.5512 发送 XHR 请求;将 jQuery 升级到下一个可用版本 1.4.0,修复了损坏的行为。在 1.4.0(及更高版本)中,IE 使用 AJAX 发布表单并发送工作所需的 X-Requested-With 标头IsAjaxRequest()。你能升级jQuery吗?我没有任何运气找到具体的错误/修复,但如果你需要坚持使用 1.3.2,我可以继续挖掘。

于 2010-03-06T10:31:17.297 回答
3

在 jQuery 代码之后添加以下代码:

jQuery.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    }
});

它强制浏览器为每个 AJAX 请求添加X-Requested-With标头。

值得注意的是,建议使用最新版本的 jQuery,因为有许多错误修复。

如果没有帮助,请使用Fiddler检查请求以查看 IE 是否发送标头。

于 2010-03-06T10:38:56.163 回答
2

看起来 IE 中发生了一个 javascript 错误,阻止了异步调用该操作。X-Requested-With: XMLHttpRequest在调试时验证 HTTP 标头是否存在。

于 2010-03-03T15:02:57.650 回答