【发布时间】:2013-12-29 09:35:25
【问题描述】:
我发现我可以传入可以使用 jquery 在 ajax 调用中调用的函数。但也有回调函数,它附加到 ajax 调用本身。现在我想知道,哪种方式是处理响应数据的更好方式:
我应该在(已经存在的)done-callback 中编写代码还是在自己编写的回调函数中编写代码,这将被传递给函数,或者两者兼而有之?
我对错误处理(失败,自己的失败回调)有同样的问题。 下面几行来更好地解释我在说什么(我希望它与我遇到的旧问题不太相似)。
function retrieveAndDisplayWords(x){....}; // if there are words added
function workOnDataDelete(y){...}; // have round about 5 different functionalities to define
myRPCcall(method, url, data, workOnData, failedCall){
$.ajax( {
type: method,
contentType: "application/json",
data: data,
url: url,
dataType: "json"
}).done(function(data, textStatus,jqXHR) {
//work on data
console.log("");
}).fail(function(jqXHR, textStatus, errorThrown){
//error-handling
console.log("");
});
}
// general ajax error handling function
function failedCall( jqXHR, textStatus, errorThrown ){
window.alert("AJAX call error occured");
console.error( errorThrown );
}
调用看起来像:
myRPCcall('GET', '/words/', null, retrieveAndDisplayWords, failedCall);
我向调用传递了两个函数,并附加了两个回调(完成,失败)。 据我了解回调“完成”和“失败”,这些应该包含响应数据发生的情况。由于我还为此目的传递了两个函数,我想知道这是否是多余的,或者这两个东西是否有不同的目的。
我认为以下是不可能的: }).done(函数(数据, textStatus,jqXHR) {
//work on data
workOnData(); // the function cannot be seen in the done-callback, can it?
console.log("");
}).
因此,由于我需要以不同的方式处理响应的数据,因此我需要传递函数或在完成回调中有一个巨大的 if。我对吗?如果是 - 更好的方法是什么?
我会将它委托给成功处理程序吗? 我可以以某种方式将 jqXHR 传递给函数,还是它们可以访问?
{
type: method,
contentType: "application/json",
data: data,
url: url,
dataType: "json",
success: workOnData, //new
error: failedCall //new
}
所以基本上:何时以及如何使用传入的函数以及提供的回调呢?
希望我描述得足够清楚,如果需要改进帖子,请告诉我。 提前致谢。
【问题讨论】:
标签: jquery ajax function callback