javascript ajax-call使用回调vs传递自己的函数

时间:2013-12-29 09:35:25

标签: jquery ajax function callback

我发现我可以传递可以使用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
}

所以基本上:何时以及如何使用传入的函数以及所提供的回调呢?

希望我描述得足够清楚,如果需要改进帖子,请告诉我。 提前谢谢。

1 个答案:

答案 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/