为什么我要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 }
就是异步, 既然已经用$.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); } }); };
@豆子丶: 找不到那个方法。 你不是用jQuery的吗 什么版本
@gunsmoke: <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> 加载的是这个.
@gunsmoke: 感谢,我重新下载了2.0.0版本的jQuery就好了.以前用的是1.4.1
这应该是一个异步的问题吧,你每次post的时候,结果还没有回来的时候,j++的操作已经完成了
那请问怎么解决呢?
将alert换成console.log试试