Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检索并中止打开的XMLHttpRequest对象_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 检索并中止打开的XMLHttpRequest对象

Javascript 检索并中止打开的XMLHttpRequest对象,javascript,jquery,ajax,Javascript,Jquery,Ajax,浏览器是否有针对打开的请求的方法 我有一个调用一些请求的插件,它不公开XMLHttpRequest/jqXHR对象;但是,Firebug确实在控制台中显示了这些请求的操作 是否有方法引用开放请求的对象?最终目标是中止现有的扩展。我认为FF扩展比在页面上下文中运行的代码具有更多的功能,这就是它能够检测请求的原因。据我所知,如果您没有保留对XMLHttpRequest对象实例的任何引用,那么就没有本机方法来检索它 然而,JavaScript是一种灵活的语言,您可以轻松创建一个拦截器来跟踪所有打开的调

浏览器是否有针对打开的请求的方法

我有一个调用一些请求的插件,它不公开XMLHttpRequest/jqXHR对象;但是,Firebug确实在控制台中显示了这些请求的操作


是否有方法引用开放请求的对象?最终目标是中止现有的扩展。

我认为FF扩展比在页面上下文中运行的代码具有更多的功能,这就是它能够检测请求的原因。据我所知,如果您没有保留对XMLHttpRequest对象实例的任何引用,那么就没有本机方法来检索它

然而,JavaScript是一种灵活的语言,您可以轻松创建一个拦截器来跟踪所有打开的调用

注意:如果可能的话,最好挂接插件方法

例如


我相信FF扩展比在页面上下文中运行的代码具有更多的功能,这就是为什么它可以检测请求。据我所知,如果您没有保留对XMLHttpRequest对象实例的任何引用,那么就没有本机方法来检索它

然而,JavaScript是一种灵活的语言,您可以轻松创建一个拦截器来跟踪所有打开的调用

注意:如果可能的话,最好挂接插件方法

例如



我不这么认为。您最好寻找一种方法来挂接插件,并以这种方式使xhr可用。或者,如果您知道它正在使用jQuery,您可以monkeypatch$.ajax方法。@KevinB您也可以只监听所有
open
调用。显然,最好是挂接到插件本身。@KevinB:事实上,我不知道,除非深入研究它的功能code@plalx:是的,那可能是我需要做的,我不这么认为。您最好寻找一种方法来挂接插件,并以这种方式使xhr可用。或者,如果您知道它正在使用jQuery,您可以monkeypatch$.ajax方法。@KevinB您也可以只监听所有
open
调用。显然,最好是挂接到插件本身。@KevinB:事实上,我不知道,除非深入研究它的功能code@plalx:是的,这可能是我需要做的,我得调查一下。看来应该行得通。我想我应该将对象添加到
window.oXMLHttpRequests
中,而不是
console.log(…)
。我还需要钩住尾声才能将其从对象中移除。@vol7ron是的,当我不知道你到底要实现什么时,很难给出完整的实现,但这应该会给你一个你需要的开始;)我连接了
send
函数,这样您就可以立即取消请求,而不必存储实例,这需要一些清理过程来避免内存泄漏。我想我可以给出更多细节。我正在使用dataTables插件,并通过切换来切换销毁/创建表。我不认为插件公开了XMLHttpRequest对象,但如果用户在加载数据时快速切换以避免竞争条件,我想中止调用。@vol7ron您是否使用我描述的解决方案想出了一些东西?很抱歉,响应太晚。不,我不得不把注意力转移到其他地方,但我计划回到这一点上。我知道FF位于较低的层并处理请求,这就是为什么它可以在控制台中的句柄上显示和操作。我想我很好奇
窗口
文档
对象中是否有句柄。我认为这对性能和功能都有好处,但在安全性方面可能是一场噩梦。不过,这对我所做的一切都很好。我得调查一下。看来应该行得通。我想我应该将对象添加到
window.oXMLHttpRequests
中,而不是
console.log(…)
。我还需要钩住尾声才能将其从对象中移除。@vol7ron是的,当我不知道你到底要实现什么时,很难给出完整的实现,但这应该会给你一个你需要的开始;)我连接了
send
函数,这样您就可以立即取消请求,而不必存储实例,这需要一些清理过程来避免内存泄漏。我想我可以给出更多细节。我正在使用dataTables插件,并通过切换来切换销毁/创建表。我不认为插件公开了XMLHttpRequest对象,但如果用户在加载数据时快速切换以避免竞争条件,我想中止调用。@vol7ron您是否使用我描述的解决方案想出了一些东西?很抱歉,响应太晚。不,我不得不把注意力转移到其他地方,但我计划回到这一点上。我知道FF位于较低的层并处理请求,这就是为什么它可以在控制台中的句柄上显示和操作。我想我很好奇
窗口
文档
对象中是否有句柄。我认为这对性能和功能都有好处,但在安全性方面可能是一场噩梦。不过,这对我所做的一切都是好事。
XMLHttpRequest.prototype.send = (function (nativeSendFn) {
    return function () {
        var sendHandler = this.constructor.onSend;
        nativeSendFn.apply(this, arguments);

        sendHandler && sendHandler(this, arguments);
    };
})(XMLHttpRequest.prototype.send);

XMLHttpRequest.onSend = function (xhr, args) {
    console.log('request ', xhr);
    console.log('arguments ', args);
};

var req = new XMLHttpRequest();

req.open('GET', 'http://www.stackoverflow.com', true);
req.send();