当前位置: 首页 > 面试题库 >

在页面上的所有AJAX请求中添加一个“钩子”

公西俊才
2023-03-14
问题内容

我想知道是否有可能“钩住”每个AJAX请求(即将发送或发生事件)并执行操作。此时,我假设页面上还有其他第三方脚本。其中一些可能使用jQuery,而其他一些则没有。这可能吗?


问题答案:

受aviv的回答启发,我做了一些调查,这就是我想出的。
我不确定它是否 按照脚本中的注释 有用 ,当然 仅适用于使用本机XMLHttpRequest对象的浏览器
我认为如果正在使用javascript库,它将起作用,因为如果可能的话,它们将使用本机对象。

function addXMLRequestCallback(callback){
    var oldSend, i;
    if( XMLHttpRequest.callbacks ) {
        // we've already overridden send() so just add the callback
        XMLHttpRequest.callbacks.push( callback );
    } else {
        // create a callback queue
        XMLHttpRequest.callbacks = [callback];
        // store the native send()
        oldSend = XMLHttpRequest.prototype.send;
        // override the native send()
        XMLHttpRequest.prototype.send = function(){
            // process the callback queue
            // the xhr instance is passed into each callback but seems pretty useless
            // you can't tell what its destination is or call abort() without an error
            // so only really good for logging that a request has happened
            // I could be wrong, I hope so...
            // EDIT: I suppose you could override the onreadystatechange handler though
            for( i = 0; i < XMLHttpRequest.callbacks.length; i++ ) {
                XMLHttpRequest.callbacks[i]( this );
            }
            // call the native send()
            oldSend.apply(this, arguments);
        }
    }
}

// e.g.
addXMLRequestCallback( function( xhr ) {
    console.log( xhr.responseText ); // (an empty string)
});
addXMLRequestCallback( function( xhr ) {
    console.dir( xhr ); // have a look if there is anything useful here
});


 类似资料:
  • 问题内容: 我想知道是否有可能“钩住”每个AJAX请求(即将发送或发生事件)并执行操作。此时,我假设页面上还有其他第三方脚本。其中一些可能使用jQuery,而其他一些则没有。这可能吗? 问题答案: 我不确定 脚本中的注释 是否有用 ,当然 仅适用于使用本机XMLHttpRequest对象的浏览器 。 我认为如果正在使用javascript库,它将起作用,因为如果可能的话,它们将使用本机对象。

  • 问题内容: 如何使用AJAX获取下一页/上一页。 如何在浏览器中调用: 要么 返回的只是文本。 应该以这种格式加载页面: 1-1或1 当用户单击下一页/上一页按钮时,如何将该页码传递给ajax调用并显示结果。 另外,我该如何跟踪用户当前正在浏览的页面?以及我该如何为页面设置最大最小值,例如我有100个页面却没有拨打101页面 http://jsfiddle.net/2b8gR/5/ 的HTML J

  • 问题内容: 我想每次发送ajax请求时显示一个“正在加载”进度栏。是否有可能在任何时候使用jQuery发送ajax请求时收到通知? 问题答案: 您可以使用该方法来设置将应用于整个页面的全局AJAX属性:

  • 问题内容: 澄清点:将自定义标头添加到我的jQuery ajax调用中没有任何问题,我想将我的自定义标头自动添加到所有ajax调用中。 如果您看看jquery $.ajax自定义http标头问题(不是我的问题),您将看到一个很好的示例,说明如何为每个ajax调用手动实现代码。 我想为所有jQuery ajax调用覆盖beforeSend。根据jQuery文档,我可以使用jQuery.ajaxSet

  • 问题内容: 我需要传递基于Ajax的帖子请求,但不确定如何才能以最佳方式完成。使用内部签入请求的平台(仅POST请求) 最初我想将其添加到标题中 这将使其可用于每个Ajax请求,但不适用于我的情况,因为in请求仍然以null形式出现。 我可以为所有处理类型的Ajax调用设置任何方法吗 编辑 如果我在Ajax调用中执行了类似的操作 一切正常。 我的问题是,我想将值作为请求参数而不是请求标头传递 问题

  • 问题内容: 在我的index.html页面中,我想在加载应用程序时加载一个单独的Ajax页面,最好的方法是什么?这是我的索引代码: 在这里加载ajax子页面..... 子页面就是: 内容.............. 谢谢。 问题答案: 使用JavaScript可以做到这一点。您必须在页面加载时执行此操作。这是jQuery中的示例。