2015-04-07 108 views
2

在我的JSON功能,它会返回一些值,我想将其存储在全局变量如何创建jQuery的全局变量

function PrepareJsonFormat() { 
    jQuery.getJSON(
    "/abc/xyz", { varA: jQuery("#qwerty").val() }, 
    function (data) { 
     if (data != null && data != "") { 
      $.each(data, function (i, val) { 
       ==> all the val.value i want to put in global variable 
      });  
     } 
    }); 
} 

后所有的值都被存储在全局变量,我将点击一个按钮并使用这些值。我怎样才能做到这一点?

请帮忙。谢谢。

回答

-1

声明变量函数外

<script> 
    // this is a global variable 
    var foo = "foo"; 
</script> 

如果产生在生产全局变量明确宣布他们:

window.globalVar = "This is global!"; 

而且,可以通过只是省略VAR定义一个全局变量(假设没有同名的局部变量),这会产生隐式的全局变量,这是一个坏事要做的事,并会产生一个n在严格模式下出错。

在你的情况,你的代码必须像thisw:

var mArray = []; // declare global array 

function PrepareJsonFormat() { 
    jQuery.getJSON(
    "/abc/xyz", { varA: jQuery("#qwerty").val() }, 
    function (data) { 
     if (data != null && data != "") { 
      $.each(data, function (i, val) { 
        // fill the array 
        mArray[i] = val; 
        // or 
        mArray.push(val); 

      });  
     } 
    }); 
} 
+0

如果我想存储数组中的所有变量,因为我不知道我将从json函数获得多少值。 – eikaz

+0

声明数组为'var mArray = [];' –

+0

@eikaz检查我的编辑,希望澄清你的疑惑... –

0

您的解决方案是决定那么简单,其中在代码中声明你写,那要看哪里该函数所在的变量。

如果要对文档一切全局访问的东西,你可以选择是这样的:

$(function(){ 
    var global = []; 

    function PrepareJsonFormat() { 
    jQuery.getJSON(
    "/abc/xyz", { varA: jQuery("#qwerty").val() }, 
    function (data) { 
     if (data != null && data != "") { 
      $.each(data, function (i, val) { 
       global[i] = val; 
      });  
     } 
    }); 
    } 
}); 

我怀疑你的问题,也许倒是你在写一个任意的语法不确定的事实'条目'的数量给一个变量。将变量声明为一个数组,使用i来指定数组中要分配数据的元素,并将其指定为val

0

在Javascript中,变量具有的功能范围,这意味着一个变量仅仅是它也在创建的函数内部的任何可见。

因此,基本上,你需要声明在正确的范围变量,你想要使用它,只要为其赋值的行与变量声明在同一范围内,就可以为其赋值。

声明变量时,你应该总是使用var关键字,但是,如果你不使用var关键字,则该变量在全局范围内自动创建(如window对象范围)。

0

我想这应该做的:

function PrepareJsonFormat() { 
    window.arr = []; // declare this array var to hold an obj 
    jQuery.getJSON(
    "/abc/xyz", { 
     varA: jQuery("#qwerty").val() 
    }, 
    function(data) { 
     if (data != null && data != "") { 
     $.each(data, function(i, val) { 
      arr.push(val.value); // here you can push the val.value in the array decalred. 
     }); 
     } 
    }); 
} 
0

<script>标签内部和函数外部声明的变量可以被任何函数访问。只需在该函数之外声明该变量即可。您可以在两个函数中使用该变量。

3

我通常建议不要使用全局变量。最好是有自己的变量作为函数的返回值或有回调参数,你可以用你的价值,只要你完成(例如,在你的getJSON回调函数)称:

function PrepareJsonFormat(callback) { 
    var myData = {}; // all data will be stored here 
    jQuery.getJSON(
    "/abc/xyz", { varA: jQuery("#qwerty").val() }, 
    function (data) { 
     if (data != null && data != "") { 
      $.each(data, function (i, val) { 
       // put the data in your variable 
       myData[i] = val; 
      }); 
      // when we are done, call the callback with myData 
      callback(myData); 
     } 
    }); 
} 

使用这样的:

PrepareJsonFormat(function(returnedData) { 
    // use returnedData (myData) here 
}); 

优于使用全局变量是,如果有什么要求你的函数两次,你不会覆盖全球。此外,任何其他JavaScript都可以访问您的全局变量,所以如果其他人使用相同的名称(并相信我,他们会:)),您的数据可能会被覆盖,然后才能使用它。另外,其他脚本可能已经声明了一个具有该名称的全局变量(不好的做法,但人们这样做),在这种情况下,您可能会破坏页面上的其他脚本。