2010-03-03 8 views
2

我試圖測試jQuery post。我張貼表單並希望在ajax中進行更新,並用div替換成功表單(看起來像一個常見用例)。如何從Firefox使用Request.IsAjaxRequest()是真實的,但在使用jquery post時從IE使用錯誤

下面的代碼在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()); 
    } 

回答

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,我可以繼續挖掘。

+0

升級工作! – leora 2010-03-06 12:53:12

2

它看起來像IE中發生的JavaScript錯誤,防止異步調用操作。在調試時驗證HTTP標頭X-Requested-With: XMLHttpRequest的存在。

+0

如何檢測IE中的javascript錯誤。我沒有看到我通常會看到的黃色感嘆號,如果我有一個JavaScript錯誤。 。 – leora 2010-03-03 22:00:12

+0

@oo:在提交處理程序中的'return false'之前放置一個alert(或console.log)。如果在此之前有一個javascript錯誤,它將不會執行(也不會返回false),從而證明您的表單正在提交舊式的方式。如果確實執行,您可能會遇到不同的問題。 – 2010-03-06 06:32:21

+0

@oo或者,使用IE8的新開發者控制檯,它對Javascript調試有很大幫助。 – 2010-03-06 10:42:10

3

添加以下代碼,之後jQuery代碼:

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

它迫使瀏覽器添加X-要求,隨着頭爲每個AJAX請求。

值得注意的是,推薦使用最新版本的jQuery,因爲有很多錯誤修復。

如果沒有幫助,請用Fiddler檢查請求,看IE是否發送頭。

相關問題