2011-11-07 47 views
0

我想在我的ajax響應中訪問變量「維度」,但無法獲取它。我不想讓這個變量全局。以下是我的代碼
javascript中的範圍變量,jquery

$(document).ready(function(){ 
    $('#submittext').click(function(){ 
    var dimensions; 
    $.ajax({ 
    type: "GET", 
    url: "bin/getcontentsize.php", 
    data: findContentsize, 
    success: function(response){ 
     //want to access dimensions here to assign response and some calculation(but not able to access it) 
    } 
    }); 
    //so i can use here 
    }); 
    }); 
+0

你是什麼意思,你不能訪問它?它會產生一個錯誤,錯誤的值等... – JaredPar

+8

你應該可以很好地訪問尺寸。然而,它將會是'未定義'的,因爲你從未初始化它。 – samjudson

+0

@samjudson是的,它說沒有定義 –

回答

7

在這種情況下,您可以訪問dimensions變量從ajax回調和代碼立即在ajax請求開始之後。這兩個上下文都可以訪問該變量。

什麼是最有可能導致問題,雖然是時機。在ajax請求完成後,success方法將異步運行。最好將其視爲稍後執行。但緊接在$.ajax調用之後的代碼將立即執行。因此,當它運行時,dimensions變量上的success處理程序不會看到任何影響。

如果您想要運行的代碼的值爲dimensions,如success方法所計算的,您需要從success回調中調用該代碼。例如

$('#submittext').click(function(){ 

    var handleNewDimensions = function (dimensions) { 
    // Code that used to be after the $.ajax line 
    } 

    $.ajax({ 
    type: "GET", 
    url: "bin/getcontentsize.php", 
    data: findContentsize, 
    success: function(response){ 
     var dimensions = doTheCalculation(...); 

     // Call the code which needs to deal with the new dimensions 
     handleNewDimensions(dimensions); 
    } 
    }); 
+0

謝謝你,這是我的問題的解決方案謝謝。謝謝 –

1

分配維度變量的值,並再次測試:

var dimensions="sample"; 
1

這應該工作:

$(document).ready(function(){ 
    $('#submittext').click(function(){ 
    var dimensions = 1; 
    $.ajax({ 
    type: "GET", 
    url: "bin/getcontentsize.php", 
    data: findContentsize, 
    success: function(response){ 
     alert(dimensions); 
    } 
    }); 
    //so i can use here 
    }); 
    }); 
2

運行它時出現問題。

$(document).ready(function(){ 
    $('#submittext').click(function(){ 
     var dimensions="1"; 
     $.ajax({ 
      type: "GET", 
      url: "bin/getcontentsize.php", 
      data: findContentsize, 
      success: function(response){ 
       dimensions = "2"; 
      } 
     }); 
     //!!!!Attention 
     alert(dimensions); // result is "1", not "2" 
    }); 
}); 

首先,您的代碼已經運行。之後,您的$ .ajax開始運行。