1 function aa{ 2 var flag=true; 3 $.get('../../ValidateJScript/aa.ashx', { a: a, b: b}, function(data) { 4 if (data == "") { 5 flag=false; 6 } 7 8 }) 9 return flag; 10 }
当data=""时,按照代码来看,最终返回的flag应该是flase。但实际情况是,返回的flag依然是true.我在$.get()里做过很多尝试,比如说 用 $('#ccc').text("ccc");给控件cc赋值,然后在$.get()外面 拿值(var b=$('#ccc).val();),却拿不到。
我需要根据data去决定返回值,但明显这种方式解决不了,想请教,是不是哪出了问题,
或者,有没有其它的办法也可以用js调用一般处理程序
看这个代码:
if (data == "") { flag=false; // 这里的flag似乎是函数内部的局部变量,改了这个flag,外面的flag可能并没有被修改。 }
var flag=ture;这个在方法体的第一步就已经定义了。而且我在$.get()里做过很多尝试,外面再拿值的时候都是没有用的。
@达殿:
我的意思是【flag=false;】中的flag是匿名方法内部的变量,并不会影响外面【var flag=ture;】中的flag。
可以将【var flag=ture;】改为【var flag=100;】,看看是不是返回了100
你可以看看 alert(data == "")是什麽?
那一块是完全没有问题的。
你代码里的$.get是异步执行的,在$.get里的代码改变flag之前,你就已经return flag了,所以return的flag永远是true.
你应该把接下来处理flag的代码放在$.get方法里去执行。
异步,有可能是这个原因。但在$get()内部直接return true还是false都是没有用的。我发现在$get()内部做任何操作,fuction aa{}都是接收不到的。
1 if (data == "aa") { 2 $('#ccc').text(data); 3 }
然后我在$get()外部再拿$('#ccc').val()...界面上的控件ccc.text会改变,但$('#ccc').val()为空。
@达殿:
建议你考虑使用回调方法,代码写多了你就会明白是怎么回事了
@狼Robot: js跟一般处理程序,用回调。确实是寡闻了,能麻烦给个demo吗?邮箱:403603030@qq.com
1 function aa{ 2 var flag=true; 3 $.get('../../ValidateJScript/aa.ashx', { a: a, b: b}, function(data) { 4 alert("get方法执行了"); 5 if (data == "") { 6 flag=false; 7 } 8 }); 9 10 alert("外部方法执行了"); 11 return flag; 12 }
你试试这段代码看看,因为get方法是异步请求的,有可能你的get方法还没有处理完,但是后面的retrun已经执行啦,所以你里面的操作没啥用了,不知道对不对,你自己测试看看。