function Test(AreaId) {
var area ="";
jQuery.getJSON("JqueryTest/City.js", function(data) {
$("#city")[0].length = 0;
$.each(data.JsData, function(i, d) {
if (d.DM == AreaId) {
area = d.MC + "";//已经改变了Area的值了
alert(area);
}
});
});
return area;
}
中间我已经改变了Area的值但是,最后返回的Area还是没有值!
为什么?????????
var area ="";
jQuery.getJSON("JqueryTest/City.js", function(data) {
$("#city")[0].length = 0;
$.each(data.JsData, function(i, d) {
if (d.DM == AreaId) {
area = d.MC + "";//已经改变了Area的值了
alert(area);
}
});
});
return area;
}
中间我已经改变了Area的值但是,最后返回的Area还是没有值!
为什么?????????
你改变一个并不改变另一个。
在javascript中一个方法表示一个变量作用范围。
就好象我们说话时候一样:
在讨论1+1这个问题的时候,答案是2;
在讨论1+2这个问题的时候,答案是3。
你能认为这两个答案表示一样的吗?解决办法:
使用返回值(我不太了解jQuery,这里不知道能不能用);
使用全局变量(不推荐);
使用对象传递(这个比较高级了);
如果alert是空说明你的d.MC 没值
undefine就另当别论了
。 function(data) {
$("#city")[0].length = 0;
$.each(data.JsData, function(i, d) {
if (d.DM == AreaId) {
area = d.MC + "";//已经改变了Area的值了
alert(area); 看着好像在一个方法体里面,其实不是的,自己写过ajax实现方式的人都知道,这是一个callback
也就是另一个方法,相当于调用另一个方法。所以你的局域变量改变不了。设成全局就可以了
function Test(AreaId) {
$.ajaxSetup({
async: false
});
就可以了!