首页 新闻 会员 周边

在使用jquery ajax.post方法的时候有一些疑问.

0
悬赏园豆:10 [已解决问题] 解决于 2015-03-16 11:49

为什么我要alert(Text)的时候必须要setTimeout才能完整的alert出来Text?如果不用setTimeout的话每次alert(Text)就会不完整,只会显示其中一部分的数据.

 1 var GetOverlay = function (e,ee,Polygon) {
 2 var j =0;
 3 var Names = [];
 4 var Text = "";
 5 for (var i = 0; i < points.length; i++) 
 6 {
 7 var pointOne = points[i];
 8 var result = BMapLib.GeoUtils.isPointInPolygon(pointOne, Polygon);
 9 if (result) 
10 {
11 $.ajax({
12 type: "POST",
13 url: "Map1.aspx/GetNames",
14 data: "{'lng':'"+pointOne.lng+"','lat':'"+pointOne.lat+"'}", 
15 dataType: "json",
16 contentType: "application/json; charset=utf-8",
17 success: function (Name_Point) {
18 Names.push(Name_Point.d);
19 } 
20 });
21 
22 coveringLng.push(pointOne.lng);
23 coveringLat.push(pointOne.lat);
24 j++;
25 }
26 }
27 function Sellp() {
28 
29 if (j==0) {
30 alert("该区域没有覆盖基站!");
31 }
32 else{
33 for (var i = 0; i < Names.length; i++) {
34 if (i == 0) {
35 Text="该区域下的基站有:\n"+Names[i]+"\n";
36 }
37 else {
38 Text=Text+Names[i]+"\n";
39 }
40 }
41 alert(Text); 
42 }
43 }
44 setTimeout(Sellp, 1500);
45 }
豆子丶的主页 豆子丶 | 初学一级 | 园豆:195
提问于:2015-03-16 09:41
< >
分享
最佳答案
1

就是异步, 既然已经用$.ajax 了 那么用$.when 等待所有的ajax request 执行完, 然后显示alert 就好了。

var GetOverlay = function (e, ee, Polygon) {

    var names = [];
    var Text = "";

    var pointOne, result, requests = [];
    for (var i = 0; i < points.length; i++){
        pointOne = points[i];
        result = BMapLib.GeoUtils.isPointInPolygon(pointOne, Polygon);
        if (result) {
            requests.push(
                $.ajax({
                    type : "POST",
                    url : "Map1.aspx/GetNames",
                    data : "{'lng':'" + pointOne.lng + "','lat':'" + pointOne.lat + "'}",
                    dataType : "json",
                    contentType : "application/json; charset=utf-8",
                    success : function (Name_Point) {
                        names.push(Name_Point.d);
                    }
                })
            );        
        }
    }
    
    $.when.apply(null, requests)
    .then(function(){
        if (names.length === 0) {
            alert("该区域没有覆盖基站!");
        } else {
            for (var i = 0; i < names.length; i++) {
                if (i == 0) {
                    Text = "该区域下的基站有:\n" + names[i] + "\n";
                } else {
                    Text = Text + names[i] + "\n";
                }
            }
            alert(Text);
        }
    });    
};
收获园豆:9
gunsmoke | 老鸟四级 |园豆:3592 | 2015-03-16 11:01
TypeError: $.when is undefined
 
  $.when.apply(null, requests)
   

报错呢,请问是什么问题?

豆子丶 | 园豆:195 (初学一级) | 2015-03-16 11:19

@豆子丶: 找不到那个方法。 你不是用jQuery的吗 什么版本

gunsmoke | 园豆:3592 (老鸟四级) | 2015-03-16 11:38

@gunsmoke:  <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> 加载的是这个.

豆子丶 | 园豆:195 (初学一级) | 2015-03-16 11:39

@gunsmoke: 感谢,我重新下载了2.0.0版本的jQuery就好了.以前用的是1.4.1

豆子丶 | 园豆:195 (初学一级) | 2015-03-16 11:48
其他回答(2)
0

这应该是一个异步的问题吧,你每次post的时候,结果还没有回来的时候,j++的操作已经完成了

收获园豆:1
最长的路漫漫 | 园豆:252 (菜鸟二级) | 2015-03-16 10:09

那请问怎么解决呢?

支持(0) 反对(0) 豆子丶 | 园豆:195 (初学一级) | 2015-03-16 10:13
0

alert换成console.log试试

dudu | 园豆:31003 (高人七级) | 2015-03-16 10:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册