Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/480.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能否经受完整的HTTP请求往返?_Javascript_Clientside Caching - Fatal编程技术网

JavaScript能否经受完整的HTTP请求往返?

JavaScript能否经受完整的HTTP请求往返?,javascript,clientside-caching,Javascript,Clientside Caching,是否有可能让JavaScript(特别是JavaScript变量及其内容)在完整的HTTP请求中存活?我希望跨页面更改“缓存”或持久化客户端信息,而不必使用隐藏的表单字段或任何与HTML相关的内容 这可能吗 编辑:让我为我的意思添加一个用例 假设我有一个JavaScript数组 叫arrayOfPersons,我 作为页面/主页的一部分加载, 现在它包含1000个对象 客户端 现在,用户切换页面并 将全新的页面/MyAccount加载到 浏览者 我的目标:在用户请求全新页面/MyAccount后

是否有可能让JavaScript(特别是JavaScript变量及其内容)在完整的HTTP请求中存活?我希望跨页面更改“缓存”或持久化客户端信息,而不必使用隐藏的表单字段或任何与HTML相关的内容

这可能吗

编辑:让我为我的意思添加一个用例

  • 假设我有一个JavaScript数组 叫arrayOfPersons,我 作为页面/主页的一部分加载, 现在它包含1000个对象 客户端
  • 现在,用户切换页面并 将全新的页面/MyAccount加载到 浏览者
  • 我的目标:在用户请求全新页面/MyAccount后,我在页面/主页上加载的arrayOfPersons仍然可用

  • 希望这能澄清我的意思。谢谢大家!

    一个框架集将为您提供一个持久化javascript的位置,但整个页面加载。。。我想不是

    Cookie对于“持久化”数据可能也很有用,但这不是您所要求的。

    找到了一个有用的方法

    JSOC框架是一个可插拔的, 可扩展的开源客户端 JavaScript缓存框架

    JSOC为Web开发人员提供了一个 执行公共事务的简单方法 缓存技术(添加、替换、, 移除、冲洗等)任何 支持JavaScript的浏览器

    因为JSOC是一个独立的JavaScript 模块,将JSOC合并到Web中 开发项目是一个关键问题 包括脚本引用,以及 使用常用的缓存方法。 低级别方法包含在 JSOCJavaScript模块,以便 开发人员可以专注于Web 当前的发展任务


    如果我理解正确,您只需将自己的缓存功能添加到所有表单的onSubmit和所有链接的onClick中,如:

    var cachedpages;
    $("A").onclick(function(){
        url = $(this).attr('href'); // maybe hash?
        if (cachedpages[url]) {
             // replacing all html
        } else {
             $.get(url, function(data){
                  cachedpages[url] = data;
                  // replacing all html
             });
        }
        return false;
    });
    

    是的,这是可能的。我在整个会话中维护页面状态(在客户端)时使用了一些技巧

    有一个基页(比如master),它在整个会话中都不会刷新,并且只在其中获得iframe。您的所有应用程序页面都将加载到该框架中

    将状态信息作为JS对象存储到该母版页中。您可以从iframe中的子页面访问母版页(父级)JavaScript对象。它将通过客户端的会话进行维护

    这是最简单的方法。而且它的工作原理非常简洁。

    较新的浏览器支持在页面之间存储任意数据。你也可以使用隐藏的Flash应用程序来记忆东西。有类似的库为您处理检测,所以您只需保存数据,它就会使用任何可用的数据


    它不会自动为下一页保存所有Javascript变量-您需要添加一个onunload处理程序来存储用户离开页面时所需的内容。

    只需添加到Nick的答案中,不同的浏览器支持以某种形式进行持久存储。在过去的一年里,已经有一系列的努力来规范所有浏览器

    它围绕HTML5的DOM存储、Microsoft的
    UserData
    、会话Cookies和
    window.name
    (使用JSON序列化作为
    window.name可以

    这只关注
    window.name
    (我认为它实际上适用于Opera9+、IE6+、Firefox 1.5+、Safari[3])


    下面是一个使用
    .swf
    (flash)文件提供最多跨浏览器支持的应用程序(尽管如果您将其配置为支持本机解决方案,它也支持本机解决方案)。我不能担保,但应该在这个jQuery lovin社区中提到它。

    一种可能是使用框架集并将对象保留在那里,另一种可能是序列化对象并通过

    window.name
    document.cookie
    location.search
    
    document.cookie
    是在同一域中的页面调用之间存储数据的规范方法,并提供了控制访问和生存期的机制

    如果使用
    window.name
    ,则数据将在浏览器实例的整个生命周期内持续存在


    使用
    window.location
    更为棘手,您必须明确修改链接以发送数据(使用事件委派可以轻松完成).

    @Fragsworth:不确定您为什么会在这种情况下想到AJAX。AJAX用于向服务器发出异步请求。与客户端缓存信息无关。当然,但AJAX将是解决此类持久性问题的标准方法Gears&YUI Library:Storage Utility呢..不确定他们是否y允许存储javascript对象。我认为YUI存储库只支持简单的字符串、int、bool数据类型作为键值对。设置一些cookie有什么问题吗?我补充了一些说明:)哦。我真的必须提高我的英语技能:)试着告诉用户安装Gears并在那里存储数据。你曾经遇到过问题吗例如,浏览器不喜欢它、设计问题或诸如此类的问题?不,Alex。我们从未遇到过这种方法的任何问题。我们的应用程序只为IE设计。但我确信这种方法应该适用于任何浏览器,因为我们在这里不使用任何花哨的技术。我们只是让javascript对象驻留在母版页中。t这种方法的问题是浏览器的位置栏会一直显示“基本页”的URL,这使得普通用户不可能为实际查看的任何页面添加书签。而且我们在这里保存的数据量相当大,几乎所有的应用程序页面都为它们的puprose使用了此状态对象,并且工作正常。另一个问题是搜索引擎的链接。它们将链接到实际页面,而不是主pa这意味着页面显示时没有母版页,因此他们没有客户端状态支持。我认为这是一个单页的内存缓存-它