2011-05-27 53 views
0

考慮代碼JavaScript全局變量不能訪問它應該在哪裏!

$(function(){ 
    $.ajax({ 
     url:'cartProcess.php', 
     data:{pname:prod, pqty:qty}, 
     type:'GET', 
     dataType:'json', 
     success:function(json){ 
       var k = eval(json); 
       var n = k[0].Name; 
       var q = k[0].Quantity; 
       var t = k[0].Total; 
      }, 
     complete:{   
      $('input.newQty').live('change', function(){ 
      alert(t/q);  
      }); 
       } 

    }); 
}); 

螢火給出了一個錯誤說T沒有定義。 我如何在全球範圍內使用這些變量?

+0

t在成功函數中定義,超出了live()回調函數的範圍。您可以在其他地方定義或更改代碼的結構。 – 2011-05-27 10:23:26

回答

4

這應該做的伎倆:

$(function(){ 
    var q = 0; 
    var t = 0; 

    $.ajax({ 
     url:'cartProcess.php', 
     data:{pname:prod, pqty:qty}, 
     type:'GET', 
     dataType:'json', 
     success:function(json){ 
       var k = eval(json); 
       var n = k[0].Name; 
       q = k[0].Quantity; 
       t = k[0].Total; 
     }, 
     complete:{   
      $('input.newQty').live('change', function(){ 
       alert(t/q);  
      }); 
     } 
    }); 
}); 
+0

謝謝!那工作..我需要刷我的範圍知識1! – 2011-05-27 10:26:47

+0

我很喜歡那樣做,但是SO不讓我這麼做!說你可以在49秒內接受這個答案! – 2011-05-27 10:34:08

+0

愚蠢SO:P總是這麼認真。 – RJD22 2011-05-27 10:48:41

0

JavaScript變量總是在它們聲明的函數範圍內。就整個函數而言,t不存在。

0

你在兩個不同的作用域中有這個變量。改變這樣的

$(function(){ 
     var k ,t; 
     $.ajax({ 
      url:'cartProcess.php', 
      data:{pname:prod, pqty:qty}, 
      type:'GET', 
      dataType:'json', 
      success:function(json){ 
        k = eval(json); 
        var n = k[0].Name; 
        var q = k[0].Quantity; 
        t = k[0].Total; 
       }, 
      complete:{   
       $('input.newQty').live('change', function(){ 
       alert(t/q);  
       }); 
        } 

     }); 
    }); 
0

你定義的局部變量tsuccess函數內 - 它不會在complete功能是可見的。嘗試在$.ajax(...)之前的「根」功能內定義它們。

0

你的變量是當地你的成功的功能。您應該將您的.live代碼最可能地轉移到成功函數中。

而且你並不需要:

eval(json); 

你已經設定具體的數據類型爲JSON,所以應該自動可作爲一個JSON對象。