我发现我可以传递可以使用jquery在ajax-call中调用的函数。但也有回调函数,它附加到ajax调用本身。现在我想知道,哪种方式更好地处理响应数据:
Shoudl我在(已经存在的)完成回调中写入代码,或者在自己编写的回调函数中编写代码,该函数将传递给函数,或者两者都可以?
我对错误处理的同样问题(失败,自己的失败回调)。 按照几行来解释我所说的更好(我希望它与我以前的一个较旧的问题不太相似)。
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);
我将两个函数传递给调用,并附加了两个回调(完成,失败)。 据我所知,回调“完成”和“失败”,这些应该包含响应数据的内容。因为我也为此目的通过了两个函数,我想知道,如果这是多余的,或者这两个东西是出于不同的目的。
我认为以下是不可能的: 完成(function(data,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
}
所以基本上:何时以及如何使用传入的函数以及所提供的回调呢?
希望我描述得足够清楚,如果需要改进帖子,请告诉我。 提前谢谢。
答案 0 :(得分:0)
<强>成功:强>
类型:Function(PlainObject数据,String textStatus,jqXHR jqXHR) 如果请求成功则调用的函数。该函数传递三个参数:从服务器返回的数据,根据dataType参数格式化;描述状态的字符串;和jqXHR(在jQuery 1.4.x,XMLHttpRequest)对象。从jQuery 1.5开始,成功设置可以接受一系列函数。每个函数将依次调用。这是一个Ajax事件。
错误:强>
类型:函数(jqXHR jqXHR,String textStatus,String errorThrown) 请求失败时要调用的函数。该函数接收三个参数:jqXHR(在jQuery 1.4.x,XMLHttpRequest中)对象,描述发生的错误类型的字符串和可选的异常对象(如果发生)。第二个参数的可能值(除了null)是“timeout”,“error”,“abort”和“parsererror”。发生HTTP错误时,errorThrown会收到HTTP状态的文本部分,例如“Not Found”或“Internal Server Error”。从jQuery 1.5开始,错误设置可以接受一系列函数。每个函数将依次调用。
success: workOnData, //new
error: failedCall //new
您的成功和错误方法如下。
function workOnData(data, textStatus, jqXHR ){ ... }
function failedCall(jqXHR, textStatus, errorThrown )){ ... }
您可以通过将其作为参数传递来访问回调方法中的jqXHR。
有关详细信息,请参阅文档:http://api.jquery.com/jquery.ajax/