如何捕获页面上的所有请求和响应,并根据每个响应状态的需要执行操作

how to capture all requests and response on the page and perform action accordin to need on every response status

本文关键字:响应 状态 操作 执行 何捕获 求和 请求      更新时间:2023-09-26

是他们监视由脚本,单击或其他任何东西触发的页面上发出的所有请求的任何方法,它不应该依赖于任何脚本块或代码,只需监视请求发出的内容,使用jquery和javascript。

例:

监视页面上发出的所有请求。

monitor{
    success:function(){
    }
    error:function(){
    }
}

您无法跟踪网页上发出的所有请求。但是,您可以通过替换 $.ajax bay 包装器来跟踪使用 jQuery 发出的请求。

示例替换插件:

(function($, undefined) {
    // a private variable which will store the current active monitors
    var monitors = [];
    // a public API to add a monitor.
    $.monitorAjax = function(monitor) {
        monitors.push(monitor);
    };

    // here starts the implementation.
    // a function to wrap a callback (error or success) to make monitors functions called.
    var wrapCallback = function(name, settings) {
        return function() {
            for(var i = 0; i < monitors.length; i++) {
                var monitor = monitors[i];
                if(monitor[name] != null) monitor[name].apply(this, arguments);
            }
            if(settings[name] != null) settings[name].apply(this, arguments);
        };
    };

    // replace $.ajax by a wraped version which will replace success and error callbacks by wrappers.
    // note that you may also track calls and their settings if you want.
    var unwrappedAjax = $.ajax;
    $.ajax = function(url, settings) {
        if(settings == null) settings = {};
        var wrappedSuccess = wrapCallback("success", settings);
        var wrappedError = wrapCallback("error", settings);
        var wrappedSettings = $.extend({}, settings, {success: wrappedSuccess, error: wrappedError});
        return unwrappedAjax(url, wrappedSettings);
    };
})(jQuery);

在jQuery中,也许是这样的:

var original_jquery_ajax=$.ajax;
$.ajax=function(){
    var a_fn, a_url;
    var cb=function(data, status, settings){
        a_fn(data, status, settings);
        console.log(a_url, data); // <-- here
    }
    for(var i=0; i<arguments.length; i++)
        if(arguments[i] instanceof Object){
            if(arguments[i].success){
                a_fn=arguments[i].success; arguments[i].success=cb;
            }
            if(arguments[i].url) a_url=arguments[i].url;
        }
    if(typeof(arguments[0])=="string") a_url=argements[0];
    var aj=original_jquery_ajax.apply(null,arguments);
    var done_original=aj.done;
    aj.done=function(cb_fn){
        a_fn=cb_fn;
        done_original(cb);
        return aj;
    };
    return aj;
};

现在,当使用 $.ajax(url) 时,您在控制台中拥有 url 和返回的数据