我正在获取JSON响应并且使用该响应,我有两个值:
我想在客户端的某处保存这两个值,以便当用户选择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":""}
答案 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');
希望它有所帮助。