无法访问页面范围内JavaScript变量
问题描述:
我取一个JSON响应,并与响应,我有两个值:无法访问页面范围内JavaScript变量
- 空运成本。
- 陆运费用。
我想将这两个值保存在客户端的某个位置,这样当用户选择一个单选按钮或另一个单选按钮时,我会将该值添加到页面上的另一个元素。
下面是我在做什么:
<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!");
}
);
});
所以,你有什么建议?如果我在change()事件中声明变量,则需要具有此JSON响应的值,可用于该页面,否则它将超出范围。
{"DaysToShip":" TER = 48 Hrs/AER = 24 Hrs","LandCost":"25,00","AirCost":""}
答
,如果你想在全球范围内声明变量,要么把他们关闭的jQuery($(document).ready(function() {...});
)外,或者不使用var
声明它们。如果您不使用var
关键字,则变量将默认为全局。
这里是设置全局变量,不会使用var
关键字的的jsfiddle:http://jsfiddle.net/jasper/JWtbV/
答
你有没有考虑直接使用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');
希望它有帮助。
答
如果您确实必须使用全局变量,则可以将它们直接附加到窗口对象。
window.airCost = cityData.AirCost;
真的不过你想拥有的JSON请求和“单选按钮”在同一范围内处理,让你不污染全局命名空间可言。
答
您拨打$.parseJSON()
的电话将返回null
,因为传递给您的回调的数据已被解析为JSON。
var json = {LandCost:3, AirCost:5},
results = $.parseJSON(json);
console.log(results); // results == null
一个快速解决方法是将'landCost'和'airCost'声明移到文档之外,这样它们将成为全局的。 – hyperslug
我不明白为什么它会在你标记的地方失败。如果你在'parseJSON'后加上'console.log(data)',你会得到你期望的对象吗? – hyperslug