Javascript 在请求期间修改jQuery$.ajax()成功方法
在我正在开发的web应用程序中,可能会出现运行时间很长的ajax查询 我使用jQuery的$.ajax方法执行以下操作:Javascript 在请求期间修改jQuery$.ajax()成功方法,javascript,jquery,Javascript,Jquery,在我正在开发的web应用程序中,可能会出现运行时间很长的ajax查询 我使用jQuery的$.ajax方法执行以下操作: this._xhr = jQuery.ajax({ type: "GET", url: "/path/to/service", data: "name=value", success: function(data, message){ // handle a success }, dataType: "json"
this._xhr = jQuery.ajax({
type: "GET",
url: "/path/to/service",
data: "name=value",
success: function(data, message){
// handle a success
},
dataType: "json"
});
是否有方法在此之后修改成功回调。\u xhr.readyState=2(已加载)和在此之前修改成功回调。\u xhr.readyState=4(已完成)
我试图修改它。xhr.onreadystatechange但是发现jQuery没有定义onreadystatechange。对我来说,
中止方法听起来是最好的选择
我不太了解ajax
方法的内部结构,但我可以想出一些方法来实现您想要的功能。两者都涉及全局状态,如果您的用户可以在第一个请求完成之前发送第二个请求,则会中断,因此我不确定是否推荐它们
首先,您可以保留对成功方法的引用,并对其进行更改:
MySuccessMethod = function(d, m) { /* handle a success */ };
this._xhr = jQuery.ajax({
type: "GET",
url: "/path/to/service",
data: "name=value",
success: function(data, message){ MySuccessMethod(data, message); },
dataType: "json"
});
// later...
// user cancels request, so change the success method
MySuccessMethod = function(d, m) { /*print a simple message*/ }
或者,您可以将所有逻辑放在one success方法中,并使用全局标志确定要执行的操作:
success: function(data, message){
if (RequestHasBeenCancelled) {
//display a simple message
}
else {
// handle a success
}
},
你能解释一下你为什么要这样做吗?也许有一个解决方案,不涉及在代码的中间使用<代码>成功/代码>函数。成功方法做了一些昂贵的处理,但是用户可以在长时间运行的Ajax请求中执行真正的取消请求的UI中的附加动作。如果发生这些操作,我将更改运行查询的success方法,以便在查询最终完成后显示一条简单消息,而不是执行不再需要的所有处理。我可以使用abort()方法,这可能是正确的方法,但我很好奇是否可以修改success函数谢谢,我现在已经使用了abort
,但我喜欢你第一个建议中的想法,我可以接受这个想法,应用类似于我的代码的东西,实际上不涉及全局状态。再次感谢。