2009-02-04 107 views
14

我正在與jQuery的ajax調用。在IE 7中,ajax調用工作正常,但在進行此調用時,FireFox 3始終會進行全頁面刷新。 ajax調用發佈到ASP.NET頁面方法。jQuery的ajax導致整個頁面刷新FireFox

在jQuery中是否存在問題或者我只是缺少一些設置?

$.ajax({ 
async: false, 
type: "POST", 
url: "Default.aspx/DoSomething", 
data: "{" + parms + "}", 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
cache: false, 
success: function(data) { succesfulPost(data); }, 
error: function(XMLHttpRequest, textStatus, errorThrown) { errorPost(textStatus, errorThrown); } 

});

該調用是由html按鈕onclick事件進行的。我嘗試了'返回假';在使這個ajax調用的方法中,但是FireFox中的完整刷新仍在繼續。

我試過設置async = true,但那似乎不起作用。 FireFox只是繼續前進,不會等待後端返回響應。 FireFox(在JS中)實際上是在ajax調用中產生錯誤。正如你在上面看到的那樣,錯誤函數被定義,並且當我設置async = true時觸發。

+0

我會保持async = true,並從那裏調試。你有沒有安裝Firebug?如果是這樣,請打開Firebug,然後單擊「Net」選項卡,然後單擊按鈕查看所調用的內容。您應該看到對Default.aspx/DoSomething的請求以及傳遞的任何參數。看看那裏是否有古怪。 – Carl 2009-02-04 16:38:31

回答

11

返回false是您需要的,但是如果在您點擊該行之前發生javascript錯誤,那麼瀏覽器將繼續愉快地執行鏈接單擊或按鈕單擊事件。

你可以嘗試用try/catch塊嘗試環繞潛在的問題區域。

或者你可以試試這個:

e.preventDefault在處理函數中的第一條語句。這應該會阻止默認事件的發生,而且我認爲你可以先打電話給我......我只是沒有嘗試過。

編輯:我還想補充一點,ajax error:handler只會捕獲來自服務器的錯誤......就像403或500.您仍然應該在try/catch中包裝ajax調用。

+1

event.preventDefault取得了訣竅。我將異步設置爲true,並添加了上述內容,現在一切似乎都行得通。 – Danno 2009-02-04 17:29:15

1

這是否是點擊事件中的調用?如果是,請確保單擊事件的結尾有「返回false」。只是一個想法。我知道這是非常古怪的事,但是,我想我會提到它。

否則,你的電話看起來很好,我可以告訴。

12

你是如何調用AJAX方法的?它可以像取消發起AJAX請求的事件一樣簡單,如果它也將導致在表單上提交。

<input type="submit" onclick="doAjaxSubmit();return false;" value="Update" /> 

添加「return false;」將導致典型的提交操作被取消。如果它來自文本框,那麼您需要將e.preventDefault添加到設置爲執行AJAX的keypress(或其他)處理程序的處理程序中。

+0

正是我想知道的。所以,如果別人想到同樣的事情,也許我不會太離譜;) – Carl 2009-02-04 16:01:44

+0

這解決了我的問題,謝謝你的解決方案。在Chrome中工作正常,但不是FF或IE。 Chrome的另一個+1,儘管技術上這是我的錯,Chrome處理得很好。 – ToddBFisher 2012-07-13 16:37:43

4

此外,如果您的輸入是type =「submit」...您可以將其更改爲type =「button」。然後,它不會嘗試提交表單......只做「點擊」事件。

1

我對使用Ajax的Firefox有類似的問題。我在表單標籤中有幾個輸入元素。但是,表單標記導致頁面刷新,即使我使用按鈕標記替換了標記。我用div替換了表單標籤,問題就消失了。

我也試過e.preventDefault(),如上所述。這也解決了這個問題,同時允許我繼續使用表單標籤。