无法访问页面范围的javascript变量

时间:2011-11-03 21:28:06

标签: javascript jquery html json

我正在获取JSON响应并且使用该响应,我有两个值:

  1. 空运费用。
  2. 陆运费用。
  3. 我想在客户端的某处保存这两个值,以便当用户选择1个单选按钮或另一个时,我将该值添加到页面上的另一个元素。

    这就是我正在做的事情:

    <script type="text/javascript">
        $(document).ready(function () {
            var landCost;
            var airCost;
    
    $("#ddlCiudad").change(function () {
        var idCity = $("#ddlCiudad").val();
        $.getJSON("/ProductCheckout/GetPriceForLocation", { cityId: idCity, productId: idProduct, type: "land" },
            function (cityData) {
                console.log("Recieved json data."); //This part works. It outputs.
    
                var data = $.parseJSON(cityData);
                console.log("Parse JSON response."); //This part works. It outputs.
    
                landCost = data.LandCost;
                console.log("Assigned value of LandCost"); //FAILS HERE. nothing is shown. not even an error.
                airCost = data.AirCost;
                console.log("Assigned value of AirCost");
    
                alert(landCost);
                console.log("Alerted land!");
                alert(airCost);
                console.log("Alerted air!");
            }
        );
    });
    

    那你有什么建议?我需要拥有此JSON响应的值,可以在该页面上使用,如果我在change()事件中声明变量,它将超出范围。

    {"DaysToShip":" TER = 48 Hrs / AER = 24 Hrs","LandCost":"25,00","AirCost":""}
    

5 个答案:

答案 0 :(得分:0)

尝试

landCost = cityData.LandCost;

答案 1 :(得分:0)

如果您真的必须使用全局变量,可以将它们直接附加到窗口对象。

window.airCost = cityData.AirCost;

实际上,您希望将json请求和“单选按钮”处理放在同一范围内,这样您根本不会污染全局命名空间。

答案 2 :(得分:0)

您对$.parseJSON()的调用返回null,因为传递给回调的数据已经解析为JSON。

var json = {LandCost:3, AirCost:5},
    results = $.parseJSON(json);

console.log(results); // results == null

答案 3 :(得分:-1)

如果要全局声明变量,请将它们放在jQuery闭包($(document).ready(function () {...});)之外,或者不要使用var来声明它们。如果您不使用var关键字,则变量将默认为全局。

以下是在不使用var关键字的情况下设置全局变量的方法:http://jsfiddle.net/jasper/JWtbV/

答案 4 :(得分:-1)

您是否考虑过使用jQuery的$.data()函数将值直接附加到DOM中的body元素并从那里访问它?

// Set Values
$('body').data('landCost', data.LandCost);
$('body').data('airCost', data.AirCost);

// Retrieve Values //
console.log($('body').data('landCost');
console.log($('body').data('airCost');

希望它有所帮助。