如何创建jquery全局变量

时间:2015-04-07 08:52:16

标签: javascript jquery arrays parsing

在我的json函数中,它会返回一些值,我想将它存储在全局变量中:

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
            });    
        }
    });
}

在所有值都存储在全局变量中之后,我将单击一个按钮并使用这些值。我怎么能这样做?

请帮忙。谢谢。

6 个答案:

答案 0 :(得分: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将有权访问您的全局变量,所以如果其他人使用相同的名称(并相信我,他们将:)),您的数据可能会被覆盖,然后才能使用它。此外,其他脚本可能已经声明了一个具有该名称的全局变量(不好的做法,但人们会这样做),在这种情况下,您可能会破坏页面上的其他脚本。

答案 1 :(得分: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

答案 2 :(得分:0)

在Javascript中,变量具有函数作用域,这意味着变量仅对其中创建的函数内部的任何内容可见。

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

在声明变量时,应始终使用var关键字,但是,如果不使用var关键字,则会自动在全局范围内创建变量(如{{ 1}}对象范围)。

答案 3 :(得分: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.
        });
      }
    });
}

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

在函数外声明变量

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

如果必须在生产中生成全局变量,请明确声明它们:

window.globalVar = "This is global!";

此外,可以通过只省略var 来定义一个全局变量(假设没有相同名称的局部变量),这会产生隐式全局变量,这是一个坏事情要做,并会在严格模式下生成错误。

在您的情况下,您的代码必须像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);

            });    
        }
    });
}