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

时间:2021-04-04 19:41:41

I have a website where I rely on a lot of custom API call. My API return always an XML.

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

Currently, at the start of each and every $.get or $.post I call, I have this snippet :

目前,在我打电话的每个$ .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;
}

However, I feel this code to be much redundant on one of my page, it's used 15 times.

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

I tried to use the $(document).ajaxSuccess() but the event.stopPropagation don't seem to work here

我试图使用$(document).ajaxSuccess(),但event.stopPropagation似乎不适用于此处

Is there a way to "intercept" each and every ajax call responses, do some stuff and possibly prevent the call to other defined success functions ?

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

1 个解决方案

#1


2  

I assume that you have something like this in many places in your code

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

$.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);
    }
});

you could create a generic custom ajax function tha you can re-use

你可以创建一个通用的自定义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);
}

everywhere in your code you can re-use the baseAjaxCall function

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

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

Hope it's helps!

希望它有所帮助!

#1


2  

I assume that you have something like this in many places in your code

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

$.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);
    }
});

you could create a generic custom ajax function tha you can re-use

你可以创建一个通用的自定义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);
}

everywhere in your code you can re-use the baseAjaxCall function

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

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

Hope it's helps!

希望它有所帮助!