簡體   English   中英

jQuery ajax成功鏈接Internet Explorer問題

[英]jQuery ajax success chaining Internet Explorer Issues

我有一個可檢索JSON數據的jQuery ajax函數。 在成功塊中,我調用另一個函數來解析數據並更新頁面。 在此解析/更新功能的結尾,進行了一個不同的ajax調用。 這在Internet Explorer(7和8)以外的所有瀏覽器中均能完美運行。 問題在於Internet Explorer認為腳本處理時間太長,因為從第一個Ajax調用開始的成功塊直到第二個Ajax調用完成才完成。

我收到消息:“停止運行此腳本?此頁面上的腳本導致您的Web瀏覽器運行緩慢。如果繼續運行,則您的計算機可能無響應。”

我的jQuery代碼:

$("#id_select").bind("change", function(e){
  $.ajax({
    url: "/retrieve_data.js",
    data: {id:$(e.target).children(":selected").attr("value")},
    type: "get",
    dataType:"json",
    success: function(data, status, form){              
      processData(data);
    },
    error: function(response, status){
      alert(response.responseText);
    }
  });
})

關於如何使IE停止超時或完成此任務而不重寫我的所有jQuery函數的任何建議,將不勝感激。

如果您可以稍微破壞一下代碼,我實際上寫了一些可以幫助您解決此問題的東西。 您實際上需要一些東西。 首先是對jQuery的擴展,它創建了工作隊列: http : //code.ghostdev.com/posts/javascript-threading-revisted-jquery 一旦完成並進行了一點測試,就可以進一步擴展它以創建AJAX隊列: http : //code.ghostdev.com/posts/javascript-threading-ajax-queueing

就我的個人情況而言,我有一個AJAX請求,該請求檢索了一個相當大的JSON塊,當它返回時,如果不產生無響應的腳本警告,我將無法全部處理。 這使函數返回,但繼續以規則的可配置間隔進行處理,直到在整個塊中進行處理為止。

我的解決方案實際上最終是重構整個事情。 我認為這樣做更好,而不是執行Ajax查詢,解析那些結果,更新頁面,然后在成功塊內執行另一個Ajax查詢,我最終只是返回了每個請求上更新頁面所需的所有JSON。 因此,每個請求將返回更多數據,然后將該數據傳遞給其他更新頁面的函數。 實際上,這使事情變得更快,因為請求減少了,並且IE並沒有到處亂扔。

在重構期間,我確實遇到了一個問題,在更新html之前需要調用$(“#selector”)。empty()。

之前:
var my_new_html = ...;
$("#selector").html(my_new_html);

后:
var my_new_html = ...;
$("#selector").empty().html(my_new_html);

在更新之前先清空內容會導致IE不再返回停止響應錯誤。

希望這對某些人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM