【问题标题】:Jquery Caching Ajax XMLHttpResponse using Local StorageJquery使用本地存储缓存Ajax XMLHttpResponse
【发布时间】:2012-10-04 13:50:55
【问题描述】:

我有一个需要升级以提供本地存储缓存功能的 Jquery 网站,Target 让每个 Ajax 请求首先检查是否有缓存的响应 HTML,然后它不会调用服务器端,而是从而是缓存。 缓存和显示缓存中的数据等一切正常..

将我的缓存核心应用到严重依赖 XML HTTP 响应标头的站点时出现了我的问题;看来,当我尝试缓存从 ajax 调用返回的 XMLHttpResponse 对象时,当然是使用 JSON.Stringify() 对其进行序列化后,从 JSON.Parse() 返回的反序列化对象不包含响应头!

我必须从包含所有先前添加的标头的缓存中返回一个 XMLHttpResponse 对象,因为所有站点都将它作为 XMLHttpResponse 的对象来处理。

有什么想法吗?

【问题讨论】:

  • 您需要为XMLHttpRequest 对象编写自定义序列化器和解析器。 JSON 仅支持JSON specification 定义的那些数据类型。功能显然不包括在内。提示:定义XMLHttpRequest.prototype.toJSON,查看JSON.parse 和XHR 实例的getAllResponseHeaders 方法。

标签: jquery ajax caching xmlhttprequest local-storage


【解决方案1】:

我找到了解决这个问题的方法...

由于所有站点都需要一个 XMLHttpResponse 对象来处理,所以我构建了一个类似于自定义 XMLHttpResponse 类的东西,这个类包含了这些站点中使用的所有变量/函数,如下例所示:

var CustomXMLHTTPResponse =
{
    ResponseHeadersArr: new Array(),

    getResponseHeader: function (Key) {
        return this.ResponseHeadersArr[Key];
    }
.
.
}

而不是缓存整个对象,我只缓存原始 XMLHttpResponse 对象中我需要的内容,实际上在这种情况下我缓存了所有响应标头;当我从缓存中获取这些数据时,我会构建一个新的 CustomXMLHTTPResponse 对象,然后用从缓存中获取的数据填充它,最后传递 CustomXMLHTTPResponse 对象。

因此,当调用 CustomXMLHTTPResponse 类中的 getResponseHeader() 函数时,它的作用与原始 XMLHTTPResponse 类中的 getResponseHeader() 相同。

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 2018-07-24
    • 2016-02-09
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多