为了账号安全,请及时绑定邮箱和手机立即绑定

JS ajax 获取方法外值

JS ajax 获取方法外值

qq_遁去的一_1 2019-04-13 08:45:47
$("#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);获取不到值!上面定义的那个是可以弹出值的!
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

随着问题更新而修改,@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);
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 332 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信