2009-11-28 141 views
6

我試圖調試爲什麼我的AJAX得到的理由/後沒有工作在IE 7/8jQuery的AJAX不工作的IE 7/8

這裏我的代碼:

$.ajax({type: "POST", dataType:'html',url: "/places/set_member/add/",data: "place_id="+place_id , 
         beforeSend: function() {$("<span class='notice'>Saving...</span>").prependTo('body');}, 
         success: function(){ 
         $.ajax({type:"GET",url:url,success:function(html){$('div.place-list .ui-tabs-panel').html(html);},complete:function(){resetAddThis();}}) 
         }, 
       complete: function() { 
          $('span.notice').fadeOut(500); 
       $('span.notice').remove(); 
          }}); 

現在這在FF Safari Win/Mac中可以正常工作,但不能在IE 7/8中使用。但我沒有在IE 7/8中正常工作。我下載了fiddler並觀看了調用,腳本應該發送數據到服務器,然後重新加載現在具有新更新信息的HTML。發生了什麼事是第一次調用會得到一個錯誤500,但是,當html重新加載後,再次執行相同的操作時,它將以200ms發送,所以它表現出它不存儲,它只做第二次嘗試。

有什麼我做錯了,還是我需要添加的東西?這是一個php循環,所以這個函數被應用到頁面上20-30項的同一鏈接上。

+0

你爲什麼要做2個Ajax調用?當你提出要求「/ places/set_member/add /」來保​​存時,返回你需要的html,而不是再做一次ajax調用來獲取它。 – PetersenDidIt 2009-11-28 21:42:25

+0

不是一個糟糕的想法,我對這一切都比較陌生,所以不知道該怎麼做。 – matthewb 2009-11-28 21:51:27

回答

12

IE緩存所有非POST類型的ajax調用。我發現最好是讓所有Ajax調用POST以避免IE執行此操作,即使發佈空數據也是如此。

或者你可以做以下@redsqaure和建議這樣做:

$ .ajaxSetup({緩存:假})

+0

我會嘗試,所以我看到的第一個500內部錯誤的原因是,因爲請求已經發送和緩存? – matthewb 2009-11-28 22:13:29

+0

謝謝,通過做1帖子,並返回該html修復了我的問題,我不再做GET的任何事情。 – matthewb 2009-11-28 22:38:11

+7

只需使用全局$ .ajaxSetup({cache:false})。這將關閉所有xhr請求的緩存。不要發佈,當你想得到.... – redsquare 2009-11-29 01:01:16

2

IE高速緩存ajax調用。請確保在呼叫中包含隨機數字或隨機字符串,例如&rand=[some randomly generated something],然後再次嘗試。

0

終於來了! 我解決我的問題,就是因爲「同源策略」,只是在IE中提高!: 的我剛剛從改變URL參數:「http://mysite.com/api/」'/ api /' 它工作!

希望它能幫助你們中的一些人!

-1

在大多數瀏覽器,您可以指定:

url: '' 

...一個jQuery的AJAX調用,這將張貼到自身。

在IE中,您必須提供一個URL。

url: '/relative/path/to/script' 
+0

不知道爲什麼你有一個投票。這是我確切的問題。謝謝! – Jeremy 2014-03-23 23:06:43

4

如果你不需要你的數據類型是HTML,你可以試試這個。

$.ajax({   
    url: 'Enter URL' 
    dataType: 'jsonp', 
    type: 'get', 
    success: function (data) { } 
}); 
0

我有與jQuery 2.0.2相同的問題。我將jQuery改爲1.8.1,Ajax在IE中完美運行。