javascript全局变量无法访问它应该在哪里!

时间:2011-05-27 10:18:47

标签: javascript jquery

考虑代码

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

  });   
});

firebug发出错误,说t未定义。 我如何在全球范围内使用这些变量?

5 个答案:

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

答案 1 :(得分:0)

Javascript变量总是在它们声明的函数范围内。就完整函数而言,t不存在。

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

      });   
    });

答案 3 :(得分:0)

您在t函数中定义了局部变量success - 它在complete函数中不可见。尝试在$.ajax(...)之前的“root”函数中定义它们。

答案 4 :(得分:0)

您的变量本地到您的成功功能。您应该最有可能将.live代码移动到成功函数中。

你也不需要:

eval(json);

您已经将dataType设置为json,因此它应该自动作为json对象使用。