`

Jquery实现Ajax的疑点

 
阅读更多

爱生活爱拼搏!一起学习----有错误请大虾们指点下。。。。。。。。。

   今天遇到个问题,于是写了个简单的实例: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里面了,以此类推,第二个消息显示框比第一个显示框里面的数据都会少获取一次数据。。。。。。
   不知道大虾们是怎么理解的,我理解错误没?  有错误请指出来啊! 谢谢了哈,共同学习,爱生活爱拼搏!
  • 大小: 5.5 KB
  • 大小: 4.6 KB
  • 大小: 6.5 KB
  • 大小: 5.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics