【问题标题】:JavaScript variable scoping - persisting state?JavaScript变量范围 - 持久状态?
【发布时间】:2009-07-17 15:33:35
【问题描述】:

我有以下设置,我需要知道如何保持状态。

1.) 外部网页使用 ajax 加载和显示一个 .jsp 文件,其中包含 javascript。 2.) 此渲染完成后,必须调用 .jsp 文件中的 javascript 以根据渲染期间发生的结果执行操作。具体来说,文档对 $(document).ready 执行操作,这些操作决定了以后的函数调用必须执行的操作。

我的问题是:如何持久化页面加载时创建的数据和状态?我尝试过这样的事情:

外部: ajax 到 test.jsp

内部测试.jsp

var saveMe = {};

function getsCalled()  
{  
    saveMe = {'a':function(){return false;}};  
}  

function needsData()  
{  
    //???  
}  

稍后...
外部:

needsData();  

我似乎没有尝试任何工作。在这种情况下保持状态的最佳方式是什么?

【问题讨论】:

  • needsData 将有权访问您示例中的 saveMe 变量。 “什么都没有 [...] 工作”是什么意思?
  • 没有尝试保存数据。 needsData 无权访问 saveMe。在 getsCalled() 中,我设置了 needsData.saveMe = {} 来解决这个问题。
  • 我不确定,但您似乎正在加载 needsData 函数,在页面加载后,但您没有做任何事情来告诉 External 是什么,那里有一个方法。你需要一个外部的全局变量,然后使用原型关键字将需求数据添加到它。例如myGlobalVar.prototype.needsData = function(){//???}
  • @iftrue:你能给我们一个更详细的例子吗?在您的代码示例中,getsCalledneedsData 都可以获取和设置 saveMe 变量。请参阅:jsbin.com/udufe/edit 单击输出选项卡以运行 JavaScript 代码。
  • index.jsp:使用 ajax,将 page.jsp 加载到 div 中。在 page.jsp 的加载过程中,getsCalled() 被调用。加载完成后,调用 needsData()。 needData 看不到 saveMe(这个数据好像已经丢失了),但是可以看到函数上设置的变量。

标签: javascript jquery jquery-ui persistence scope


【解决方案1】:

如果您想了解范围界定,请阅读 this。它可能会帮助您弄清楚发生了什么。

【讨论】:

    【解决方案2】:

    您是否尝试过在 $(document).ready 之外声明 saveMe?然后,您应该能够从 $(document).ready 内部以及外部脚本中更改值。我不确定作用域如何适用于来自 ajax 调用的 javascript 变量,所以我不确定这是否真的有效。

    【讨论】:

      【解决方案3】:

      使变量成为函数对象的成员很顺利。

      【讨论】:

        猜你喜欢
        • 2011-08-24
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 1970-01-01
        • 2020-02-07
        • 2012-12-23
        • 2011-05-10
        相关资源
        最近更新 更多