浏览 2897 次
锁定老帖子 主题:Jquery实现Ajax的疑点
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-10-21
爱生活爱拼搏!一起学习----有错误请大虾们指点下。。。。。。。。。 今天遇到个问题,于是写了个简单的实例:JQuery实现Ajax实现JSON方式显示获取的数据: 关键代码如下: //接收json var s=""; $("#button").click( function(){ //通过jQuery请求JsonServlet $.post("JsonServlet",function(data){ s+=data.name+"\n"+data.sex+"\n"+data.age; alert(s);//第一次显示s消息框 },"json"); alert(s);//接着显示 } ); 页面代码一句: <input type="button" value="test3" id="button"/> Servlet代码: JSONObject j = new JSONObject(); j.put("name", "admin"); j.put("sex", "boy"); j.put("age", 16); PrintWriter out = response.getWriter(); out.println(j.toString()); out.flush(); 运行第一次点击按钮页面跳出两个消息框: 第一次点击时候------------> 显示获取json里面的数据: 接着第二个消息框-----------> 接着第二次点击按钮页面跳出两个消息框: 第一个依然是接受json中的数据---> 接着第二个消息框--------------> 假如代码是这样--------------------> //接收json $("#button").click( function(){ var s=""; //通过jQuery请求JsonServlet $.post("JsonServlet",function(data){ s+=data.name+"\n"+data.sex+"\n"+data.age; alert(s); },"json"); alert(s); } ); 则不论点击多久都只会出现上面第一次点击的效果,第二个消息框总是为空; 我想这就是Ajax异步机制的原理么,如果把这当成线程看待: 异步消息处理线程是指:线程启动后会进入一个无限循环体之中,每执行一次,从线程内部的消息队列中取出一个消息,并回调相应的消息处理函数,执行完一个消息后则继续循环。。。 我想如果放在同一作用域里面,第一次获取数据时候第二个消息显示框没来得及去获取就默认显示s=“”了,在第一个实例里面,由于s的作用域相当于全局,所以当第二次点击按钮时候,数据把第一次获取的数据放入s里面了,以此类推,第二个消息显示框比第一个显示框里面的数据都会少获取一次数据。。。。。。 不知道大虾们是怎么理解的,我理解错误没? 有错误请指出来啊! 谢谢了哈,共同学习,爱生活爱拼搏! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-10-22
请将你的代码排版好
|
|
返回顶楼 | |
发表时间:2012-10-22
请在地址上加上时间
|
|
返回顶楼 | |
发表时间:2012-10-22
var s=""; 放在
$("#button").click(function(){ ...}); 里面和放在外面的区别是: 1 放在外面,则此s的值只初始化一次,以后的赋值会永久保持。 2 放在里面则每次点击时会先重置s的值为""。 除此以外没有任何区别。 反正都是闭包,只是不同的闭包里会导致它有不同的作用域。 另外要说明的是:你这种异步调用的代码无法保证哪个alert(s);先执行哪个后执行。所以可以百分之百地说这种代码虽然语法没有问题,但是逻辑是有问题的。 |
|
返回顶楼 | |
发表时间:2012-10-22
mfkvfn 写道 var s=""; 放在
$("#button").click(function(){ ...}); 里面和放在外面的区别是: 1 放在外面,则此s的值只初始化一次,以后的赋值会永久保持。 2 放在里面则每次点击时会先重置s的值为""。 除此以外没有任何区别。 反正都是闭包,只是不同的闭包里会导致它有不同的作用域。 另外要说明的是:你这种异步调用的代码无法保证哪个alert(s);先执行哪个后执行。所以可以百分之百地说这种代码虽然语法没有问题,但是逻辑是有问题的。 我也是这样理解的,这个问题在实际开发过程中也没任何实际意义。。。感谢感谢 |
|
返回顶楼 | |
发表时间:2012-10-22
ghyghost 写道 请在地址上加上时间
懂你意思。。。。OK |
|
返回顶楼 | |
发表时间:2012-10-22
jamcode 写道 请将你的代码排版好
下次会注意点,谢谢提醒哈 |
|
返回顶楼 | |