如何处理ajax中嵌套一个ajax
第一种
描述:如果条件许可,把两次请求都放在服务端处理掉一起发回来,这些就在客户端只有一次ajax了
优点:代码放在服务端,安全性比较,且服务端处理速度较快
缺点:可能请求的数据格式是json,这样在服务端处理JSON数据还需要对JSON进行反序列化,这样就比较麻烦
第二种
描述:是我第一次解决这个问题的时候用的比较蠢的办法,第一次请求的ajax,循环值PUSH到公共变量中去,然后用这个公共变量作为参数去请求第二个ajax
1 $.ajax({
2 cache: false,
3 type: 'POST',
4 url: url1,
5 dataType: 'json',
6 success: function (data) {
7 var list="";
8 //用,做隔断发回后台用split取值
9 for(var i=0;i<data.length-1;i++)
10 {
11 list+= data[i].id;
12 if (i != data.length - 1) {
13 list+= ",";
14 }
15 }
16
17 $.ajax({
18 cache: false,
19 type: 'POST',
20 url:url2,
21 data: { para: list},
22 dataType: 'json',
23 success: function(result) {
24 .......
25 }
26 })
27 }
28 })
优点:节省开销
缺点:这样写的确有点蠢...除了蠢之外 我再补充一点 这样做第二次ajax只能是自己去请求自己服务器,如果是别人的服务 不可能给你拆分参数
第三种
描述:使用async :false。ajax默认async是为ture的,当async: true 时,ajax请求是异步的。但是其中有个问题:ajax请求和其后面的操作是异步执行的,那么当页面还未执行完,就可能已经执行了 ajax请求后面的操作。当async:false时,ajax请求为同步,这时Ajax请求将整个浏览器锁死,直到请求结束
1 $.ajax({
2 cache: false,
3 type: 'POST',
4 url: url1,
5 async: false,
6 dataType: 'json',
7 success: function (result) {
8 for(var i=0;i<result.length-1;i++)
9 {
10 $.ajax({
11 cache: false,
12 type: 'POST',
13 url: url2,
14 async: false,
15 dataType: 'json',
16 success: function (data) {
17 ...
18 }
19 });
20 }
21 }
22 })
优点:可以按照逻辑顺序正常的写代码
缺点:同步时整个页面是被锁死的


浙公网安备 33010602011771号