2015-04-07 106 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都可以訪問您的全局變量,所以如果其他人使用相同的名稱(並相信我,他們會:)),您的數據可能會被覆蓋,然後才能使用它。另外,其他腳本可能已經聲明瞭一個具有該名稱的全局變量(不好的做法,但人們這樣做),在這種情況下,您可能會破壞頁面上的其他腳本。