JS ajax 获取方法外值

$("#province,#city").change(function(){
vari=$(this).attr('id');
$.ajax({
type:'post',
url:$("#address-form").attr('action'),
dataType:'text',
data:{
id:$(this).val()
},
success:function(data){
varid='';
alert(i);
switch(i){
case'city':
id="#area";
break;
case'province':
id="#city";
break;
default:
alert('\u8bf7\u786e\u8ba4\u8be5\u5bf9\u8c61\u0049\u0044');
}
$(id).empty();
for(variindata.msg){
$(id).append(""+data.msg[i].name+"");
}
}
});
});
为什么alert(i);获取不到值!上面定义的那个是可以弹出值的!
qq_遁去的一_1
浏览 333回答 2
2回答

素胚勾勒不出你

随着问题更新而修改,@mcfog大大的回答亮了。比较符合这个新问题的答案。变量提升:HoistingisJavaScript'sdefaultbehaviorofmovingdeclarationstothetop.因为你在后面的for循环用了var声明了i,所以提升到了当前function的顶部,那就是我之前解答提到的,先在function里面找i,因为变量提升i存在于当前作用域,又刚好没赋值,所以就拿不到值。拿不到值,不科学啊。为了验证一下,我也写了个代码测试。是可以获取的。访问i时,先在所在的function找,找不到再往外面找,再找不到就往外面的外面找,一直找到天涯海角,哦不,是全局,还找不到,我也没办法--||楼主是不是在这个过程中i内啥被覆盖了?还是真的获取不到。(function($){$('#btn').change(function(e){vari=$(this).attr('id');$.ajax({url:"./f",type:"GET",cache:false,data:'test=123',success:function(data){alert(i);try{vardataObj=eval("("+data+")").root;}catch(e){alert("数据出错:"+e);}},error:function(e){}});})})(jQuery);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript