2012-11-06 116 views
2

我有超时运行的程序在后台加载数据:

(function getSubPage() { 
    setTimeout(function() { 
     if (cnt++ < pagelist.length) { 
      loadSubPage(pagelist[cnt]); 
      getSubPage(); 
     } 
    }, 500); 
})(); 

loadSubPage()我做$.ajax()电话:

function loadSubPage(page) { 
    if (typeof(initSubPages[page]) === "undefined") { 
     $.ajax({ 
      type: "POST", 
      url: '/Main/GetPageData', 
      data: { page: page }, 
      success: function (returndata) { 
       // ... 
      }, 
      error: function() { 
       alert("Error retrieving page data."); 
      } 
     }); 
     initSubPages[page] = true; 
    } 
} 

我遇到的问题是error处理程序正在用户浏览,如果任何Ajax请求打开时被击中。我试图通过.stop()解决window.onbeforeunload上的请求,但我不确定什么对象可以拨打.stop()

回答

4

jQuery的公开XMLHttpRequest对象的abort方法,所以你可以把它和取消请求。您需要将打开的请求存储到变量中,然后致电abort()

activeRequest = $.ajax({... 

,并阻止它

activeRequest.abort() 
+1

我明白了。由于我正在运行超时,因此我需要一张地图来跟踪这些对象。 – Paul

+0

如果在一个变量内发送ajax调用,你将如何发送? activeRequest.send()? – VIDesignz

+0

@VIDesignz,jQuery框架发送请求。 – epascarello

0

$.ajax返回XMLHTTPRequestObject其中有.abort函数。该功能将在请求完成之前暂停请求。

var xhr = $.ajax({ /*...*/ 

.. 
.. 
/* Later somewhere you want to stop*/ 
xhr.abort(); 

了解更多:How to cancel/abort jQuery AJAX request?

0

这里是我使用了基于反馈的解决方案:

window.onbeforeunload = function() {    
    for (page in ajaxing) { 
     if (ajaxing[page] != null) 
      ajaxing[page].abort(); 
    } 
}; 

var ajaxing = {}; 

function loadSubPage(page) { 
    if (typeof(initSubPages[page]) === "undefined") { 
     var ajaxRequest = $.ajax({ 
      type: "POST", 
      url: '/Main/GetPageData', 
      data: { page: page }, 
      success: function (returndata) { 
       // ... 
      }, 
      error: function() { 
       alert("Error retrieving page data."); 
      }, 
      complete: function() { 
       ajaxing[lot] = null; 
      } 
     }); 
     ajaxing[page] = ajaxRequest; 
     initSubPages[page] = true; 
    } 
}