2

jqueryの投稿をテストしようとしています。私はフォームを投稿していて、ajax で更新し、div 上の成功フォームに置き換えたいと考えています (一般的な使用例のようです)。

次のコードは、Firefox では正常に機能しますが、IE では機能しません。

1 つの問題は、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 に答える