相关疑难解决方法(0)

jQuery逐步读取AJAX流?

我已经阅读了这个问题,但它并没有完全回答我的问题.不幸的是,自从我上次查看AJAX以来,看起来XHR对象中的内容发生了变化,因此responseText在完成填充之前不再可以直接访问.

我必须编写一个使用AJAX(最好是jQuery,但我愿意接受建议)的页面来从我无法控制的服务器通过HTTP检索CSV数据.响应数据可能非常大; 一兆字节的文本并不少见.

服务器是流友好的.是否有任何方法可以直接从JavaScript返回数据流?

我可以选择编写一些生活在中间的PHP代码并使用某种"Comet"技术(长轮询,EventSource等),但我希望尽可能避免这种情况.

如果它是相关的,假设这个问题用户有最新版本的Firefox/Chrome/Opera和旧的浏览器兼容性不是问题.

ajax jquery javascript-events long-polling http-streaming

70
推荐指数
4
解决办法
7万
查看次数

拦截XMLHttpRequest并修改responseText

我正在尝试构建一个脚本,它将充当本机XMLHttpRequest对象的代理/包装器,使我能够拦截它,修改responseText并返回原始的onreadystatechange事件.

上下文是,如果应用程序尝试接收的数据已在本地存储中可用,则中止XMLHttpRequest并将本地存储的数据传递回应用程序成功/失败回调方法.假设我无法控制应用程序现有的AJAX回调方法.

我原本试过以下想法..

var send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(data){
   //Do some stuff in here to modify the responseText
   send.call(this, data);
};
Run Code Online (Sandbox Code Playgroud)

但正如我现在所建立的那样,responseText是只读的.

然后我尝试退后一步,编写自己的完整本机代理XMLHttpRequest,最终编写自己的本机方法版本.与此处讨论的相似......

http://www.ilinsky.com/articles/XMLHttpRequest/#implementation-wrapping

但它很快就变得混乱,并且仍然难以将修改后的数据返回到原始onReadyStateChange方法中.

有什么建议?这甚至可能吗?

javascript ajax xmlhttprequest

11
推荐指数
1
解决办法
7659
查看次数

猴子补丁XMLHTTPRequest.onreadystatechange

如何修补猴子XMLHTTPRequestonreadystatechange功能.我正在尝试添加一个函数,当从页面发出的每个ajax请求返回时,将调用该函数.

我知道这听起来像一个可怕的想法,但用例非常奇特.我想在控制台(jqconsole)中使用某个SDK,但在控制台内显示ajax调用的状态和结果,而不修改外部SDK.

我看过这篇文章有很多信息,但猴子修补回调似乎超出了我的JavaScript技能.

PS不能使用jQuery,因为它只支持从jQuery调用的jjj调用,而不是XMLHTTPRequests直接来自这里的情况.

javascript ajax monkeypatching xmlhttprequest

7
推荐指数
1
解决办法
3237
查看次数

如何拦截和修改任何对象的特定属性

对于任何未知数量的对象,我想要拦截并更改某些属性(如果需要)。我尝试过 getter 和 setter,但我只能实现接近我想要的目标,并且只能针对已知的对象。

以下是我想要实现的目标的示例:

在我的范围/闭包之外创建的对象

正如您所看到的,这些对象无法从外部访问,我想要做的是检查每个year_of_birth属性,并在为任何未知对象创建或更改它时对其进行修改。我得到的最接近的是通过 getter/setter,但我必须传递对象,并且每次更改其值时它都会循环自身。

year_of_birth尝试通过检查当前年份的年龄来纠正的示例

Object.defineProperty(unknown_object, 'year_of_birth', {
    set: function(year) {
        if (this.age && 2017 - this.age > year) {
            this.year_of_birth = 2017 - this.age;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

或者

Object.defineProperty(unknown_object, 'year_of_birth', {
    get: function(year) {
        if (this.age && 2017 - this.age > year) {
            return 2017 - this.age;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

但仍然不能很好地工作,并且只适用于我可以直接访问的单一对象。

有什么办法可以做到这一点吗?请不要使用像 jQuery 这样的库/框架的解决方案。

编辑:片段示例,因为上面不够清楚:

Object.defineProperty(unknown_object, 'year_of_birth', {
    set: function(year) {
        if (this.age && 2017 - this.age > year) {
            this.year_of_birth = …
Run Code Online (Sandbox Code Playgroud)

javascript object

5
推荐指数
1
解决办法
2530
查看次数