如何在不使用全局变量的情况下在javascript中存储和访问ajax数据?

时间:2010-04-03 08:35:10

标签: javascript ajax json global-variables

我可能会遗漏一些明显的东西,但是我怎么能重写这段代码,以便它不需要theVariable作为全局变量?

<script language="javascript">  
theVariable = "";  
function setValue()  /* called on page load */ 
{    
   /* make ajax call to the server here */
   theVariable = "a string of json data waiting to be eval()'d"; 
}  
function getValue()  
{  
    alert(theVariable);  
}  
</script>     


<input type="button" onClick="javascript:getValue()" value="Get the value">

在我的实际情况中,setValue函数对服务器进行ajax调用,接收json字符串,当您将鼠标悬停在页面的各个部分时,将访问该数据。我最终使用了几个全局变量,这些变量工作正常,但是很麻烦,我想知道是否有更好更优雅的方法呢?

4 个答案:

答案 0 :(得分:3)

我会做类似的事情:

<script language="javascript">
var myApp = function () {

    /* theVariable is only available within myApp, not globally 
     * (unless you expose it) 
     */
    var theVariable = "";  

    /* called on page load */
    var setValue = function setValue(){

       /* make ajax call to the server here */
       theVariable = "a string of json data waiting to be eval()'d"; 

    };

    var getValue = function getValue() {

        alert(theVariable);

        // call useless private function
        pFunc();

    };

    var pFunc = function pFunc(){
        // this is a hypothetical private function
        // it's only here to show you how to do it
        // in case you need it

    };

    // now expose anything you need to be globally available
    // basically anything that will be called outside of myApp

    return { setValue: setValue, getValue: getValue}; 
}(); 
</script>     


<input type="button" onClick="myApp.getValue()" value="Get the value">

然后在某处您可以为myApp.setValue()添加一个事件监听器或其他内容,以便在页面加载时运行它。

如果你这样做了:

return this;

或者只是完全退出return语句(这意味着要返回)...

然后所有将作为myApp.whatever或myApp [无论如何]全局可用。

答案 1 :(得分:2)

如果你使用jQuery(你可以用于ajax部分),你可以使用.data()方法,它允许你通过键/值将仲裁数据分配给文档元素。

因为beccase javascript是动态类型的,你也可以按名称/ id获取一个元素,然后为该元素添加一个属性,例如

document.myData = 'xyz';

最后,您可以使用名为closure的内容限制变量的范围。

答案 2 :(得分:1)

你可以这样做一个闭包:

<script type="text/javascript">
function setValue() /* called on page load */
{
    /* make ajax call to the server here */
    var theVariable = "a string of json data waiting to be eval()'d"; /* declared with var to make it a private */
    getValue = function() /* declared without var to make it a public function */
    {
        alert(theVariable);
    }
}
</script>

答案 3 :(得分:0)

如果你不介意拥有一个全局,你可以创建一个javascript对象并在javascript对象本地存储任意数量的数据。

以下是一个例子:

var myData = {

变量1:'',

变量2:'',

变量:''

};

设置如下数据:

myData.variable1 ='hello,world';

在您的onclick中,您可以调用myData.variable1来检索数据。