每个ajax成功回调之前的exec函数

时间:2015-05-18 09:49:58

标签: javascript jquery ajax

我有一个网站,我依赖很多自定义API调用。我的API总是返回XML。

目前,在我打电话的每个$ .get或$ .post的开头,我有这个片段:

var root = $($.parseXML(data)).find("Response");

if (root.children("Type").text() == "Error") {
  toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text());
  return;
}

但是,我觉得这个代码在我的某个页面上多余了,它被使用了15次。

我尝试使用$(document).ajaxSuccess()但是event.stopPropagation似乎不能在这里工作

有没有办法“拦截”每个ajax呼叫响应,做一些事情并可能阻止调用其他已定义的成功函数?

1 个答案:

答案 0 :(得分:2)

我假设您的代码中的许多地方都有类似的内容

$.ajax({
    method: "GET",
    url: "someurl.html",
    dataType: "xml",
    success : function() {
        var root = $($.parseXML(data)).find("Response");
        if (root.children("Type").text() == "Error") {
          toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text());
          return;
        }
        // ...
    },
    error : function(qXHR, textStatus, errorThrown){
        toastr.error(errorThrown, "Error " + qXHR.status);
    }
});

您可以创建一个可以重复使用的通用自定义ajax函数

function baseAjaxCall(option, sCb) {    
    var ajaxOptions = {
        method: option.method || "GET",
        url: option.url,
        dataType: option.dataType || "xml",
        success : function(data) {
            var root = $($.parseXML(data)).find("Response");
            if (root.children("Type").text() == "Error") {
              toastr.error(root.children("Content").text(), "Error " + root.children("ReturnCode").text());
              return;
            }
            else {
                sCb(root);
            }
        },
        error : function(qXHR, textStatus, errorThrown){
            toastr.error(errorThrown, "Error " + qXHR.status);
        }
    };
    //you can check for optional settings
    if(option.contentType  !== undefined){
        ajaxOptions.contentType = option.contentType;
    }

    $.ajax(ajaxOptions);
}

您的代码中的任何地方都可以重复使用baseAjaxCall函数

baseAjaxCall({ url: "someurl.html" }, function(root){
 // no need to chek for errors here!
});

希望它有所帮助!