2011-08-02 45 views
10

我有一個網站(在IE8和IE7即使正常工作),我做一個Ajax調用是這樣的:爲什麼這個jQuery的Ajax調用失敗,只有在IE9

  // perform an ajax request to generate a new subscriber account 
      jQuery.ajax({ 
       type: 'POST', 
       url: '/index.php?option=com_content&view=article&id=45&tmpl=component', 
       data: postVars, 
       success: handleResponse, 
       error: function(jqXHR, textStatus, errorThrown) { 
        alert ('response: ' + jqXHR.responseText); 
        alert ('code: ' + jqXHR.getResponseHeader('X-Subscriber-Status')); 
       } 
      }); 

被請求的頁面不辦除了返回一個數字狀態碼之外,其他任何瀏覽器都可以正常工作,除了IE9以外。該腳本與其請求的頁面位於同一個域中,因此跨域腳本不應存在任何問題。

我終於找到發生了什麼,但我不知道如何解決它。事實證明,Ajax請求成功完成,沒有問題。我通過使用Fiddler來查看網絡流量來驗證這一點。服務器使用HTTP狀態代碼200響應請求,並且主體不包含任何東西,但只包含單個數字的響應代碼。在這一點上,jQuery執行錯誤處理程序,而不是預期的成功處理程序(在IE9中)。爲什麼要這樣做,我該如何防止它?這隻發生在IE9中。即使IE8和IE7工作正常,完全相同的代碼!正如你所看到的,我終於採取了檢測IE9並使用XmlHttpRequest對象來做到這一點(順便說一句,它工作得很好)。

這看起來像一個jQuery的bug,但我在我的搜索中找不到任何提及。我真的是唯一一個經歷過這種奇怪行爲的人嗎?

+0

您有運行的IE9不同的功能邏輯。doIe9Request()看起來像什麼?那是錯誤的。 –

+1

是的,Ajax請求不會失敗。它不會在IE9中執行。 – Tomm

+1

在解決問題後添加了單獨的邏輯。我修改了原文,以反映我在IE9中失敗的代碼,但沒有其他瀏覽器。 – rushinge

回答

7

嗯,我終於找到了問題所在。事實證明,由於某種原因jQuery/IE不正確urlencode雙引號。請求的網址是:

/search.json?callback=jQuery16105234487927080267_1313510362362 & Q =股票或 「股市」 -blueprint -empireavenue.com -learn & _ =由1313510362469

在其他瀏覽器時間的jQuery執行它看起來像Ajax請求:

/search.json?callback=jQuery16105234487927080267_1313510362362 & q =股%20OR%20%22stock%20market%22%20%藍圖%20-empireavenue.com 20學習& _ = 1313510362469

但在IE的所有版本是什麼原因它出來是這樣的:

/search.json?callback=jQuery16105234487927080267_1313510362362 & Q =庫存%20OR%20 「股票%20market」 %20%的藍圖20 empireavenue .COM%20-學習& _ = 1313510362469

造成服務器返回的數據。

1

確定您要撥打的電話號碼(/index.php?option=com_content&view=article&id=45&tmpl=component)適用於IE9嗎?如果您在IE9中加載該PHP頁面,它是否會返回預期結果?它應該這樣做,但值得檢查的是,錯誤是在jQuery調用中,而不是PHP。

此外,POST調用通常是以'index.php'這樣的頁面作爲變量postVars發送查詢字符串(option=com_contentview=article等)。

嘗試使用以下:

$.ajax({ 
    type: "POST", 
    url: "index.php", 
    data: { 
     option : com_content, 
     view : article, 
     id : 45, 
     tmpl : component 
    }, 
    success: function(msg){ 
     console.log(msg); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log(textStatus) 
    } 
}); 

剝離下來的功能,它的基本組成部分,你應該可以看到錯誤的來源。

+0

感謝您的回覆。我在IE9中嘗試了URL,它工作正常。我只是得到一個在HTTP主體中返回的單個數字代碼,沒有別的代碼。我想也許這是在我的服務器配置jQuery不喜歡IE9的東西。這是一個Joomla網站,我有其他人編寫的幾個模塊展示相同的問題,他們的所有jQuery ajax調用在IE9中失敗,但沒有其他瀏覽器。我試過jQuery 1.5.2和1.6.2,當我看到的請求沒有任何問題時,兩者都似乎運行錯誤回調。 – rushinge

+0

我試過在jsfiddle.net上使用你的代碼(http://jsfiddle.net/chris5marsh/equkA/2/),它似乎工作正常。雖然他們在頭部有一個'meta'標籤,但是有以下內容: '' 這可能是現在修復 - 它基本上告訴頁面使用IE7,你說的代碼工作。 希望這會有所幫助。 – chris5marsh