2012-08-29 30 views
0

我是javascript和jQuery中的新成員。 我使用ajax調用從我的服務器獲取數據。事實上,我在調用之後失去了我的javascript變量。 下面是我所做的:變量是在任何函數之外定義的,並在其他函數中處理。在ajax調用後保留一個javascript變量

var a = 0; 
function myfunction(url){ 
$.ajax({ 
     url: url, 
     timeout: 20000, 
     success: function(data){ 
        // Do some stuff 
        // The a variable is now undefined 
       }, 
     error: function(){ 
        // Do some stuff 
       } 
     }); 
} 

一切工作正常,唯一的事情是,我需要讓我的變量...但它看起來像它的消失..

有誰知道爲什麼嗎?

感謝

+0

你是否確實這樣做了,或者你是否事實上在另一個函數範圍內聲明瞭變量! – adeneo

+0

作爲最糟糕的情況,您可以使用全局變量。 – VisioN

+0

這是最好的變化範圍,我的朋友。 – esqew

回答

3

你說你正在使用你的變量在其他功能(但不要告訴我們,功能)。但是,該函數可能在AJAX調用完成之前運行。這就是「異步」的含義 - 它們不會同時發生。

要解決此問題,請在success回調中添加一些代碼,在回調中它只會在a變量更改後纔會運行。

+0

但我在做ajax調用之前設置了'a'變量。 我在ajax調用之前和成功函數中添加了一個console.log。 在調用之前,我有正確的變量值,之後,變量是未定義的... 有沒有辦法在ajax調用的設置中傳遞某些東西? –

+1

你需要分享更多的代碼,所以我們可以清楚地看到你在整個代碼中如何使用這個變量。 – Blazemonger

+0

但在我的代碼的其他部分,我只是增加變量,沒有關係...只是 a ++;或者 - ; –

0

這工作和網址確實保持在範圍內。你應該檢查的是如果你得到一個錯誤 - 這將阻止成功運行(拋出一個alert("error");或在那裏類似的測試)。

我使用FireFox中的Firebug來幫助我。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<script type="text/javascript"> 

var a = 0; 

function doSomething (url){ 
    $.ajax({ 
      url: url, 
      timeout: 20000, 
      success: function(data){ 
         alert(a); 
        }, 
      error: function(){ 
         // Do some stuff 
        } 
      }); 
    } 

</script> 

<a href="#" onclick="doSomething('variableScope.html'); return false;">Do it</a> 
+0

事實是,當我運行它,一個變量是未定義的... –

+0

然後你的問題/代碼示例是不完整的 - 你可以添加一個調試器;語句添加到您的JavaScript代碼塊中,在您嘗試訪問變量的位置之後 - 這可能有助於提供一些見解。 如果你在一個動態的應用程序,你應該強烈地鍵入你的變量,因爲它可能會被另一個函數覆蓋(強類型意味着給它一個更具體的名稱,像pageLoadStatus,或類似的東西。 –

相關問題