早上五点:$.ajax 三层循环嵌套,异步请求顺序执行,done(),then()没有解决,问题在哪里?求教promise()

三碗猪脚 2019-11-30 05:07:15
业务场景,
三层循环嵌套
指定一个省,先获取该省的全部地级市,再获取每个市下的县区,最后获取每个县区下的学校,实际上得到全省的学校数据
目标要求:按照先获取完一个市的,再获取下一个市的,当本市的没有完成,下一个市不开始,
但按如下代码,最后能全部获取,但是发现上一市没有读完,下一个市就开始了,偿试了用done(),then()都没有解决,问题在哪里?
求大神不吝赐教


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="css/control.css" rel="stylesheet" />
<style>
#btnGet, #btnGetAll {
width: 150px;
}
</style>
<script src="js/jquery.2.1.4.min.js"></script>
</head>
<body>
<select id="prov" style="height: 30px;">
<option value="0">直辖市</option>
<option value="1">山东</option>
<option value="7">河北</option>
<option value="10">陕西</option>
<option value="12">安徽</option>
<option value="90">山西</option>
<option value="91">内蒙古</option>
<option value="92">辽宁</option>
<option value="93">吉林</option>
<option value="94">黑龙江</option>
<option value="96">江苏</option>
<option value="98">浙江</option>
<option value="100">江西</option>
<option value="101">河南</option>
<option value="102">湖北</option>
<option value="103">湖南</option>
<option value="104">广东</option>
<option value="105">广西</option>
<option value="106">海南</option>
<option value="108">四川</option>
<option value="109">贵州</option>
<option value="110">云南</option>
<option value="111">西藏</option>
<option value="112">甘肃</option>
<option value="113">青海</option>
<option value="114">宁夏</option>
<option value="115">新疆</option>
<option value="642">福建</option>
</select>
<input id="btnGet" type="button" value="获取当前省份" class="ManagerButton" onclick="Get();" />
<input id="btnGetAll" type="button" value="获取全部省份" class="ManagerButton" />
<br />

<span id="ict" class="spaninfo"></span>
<br />
<span id="icn" class="spaninfo"></span>
<br />
<span id="ics" class="spaninfo"></span>

<script type="text/javascript">
//获取全部的市列表
function Get()
{
var procode = $("#prov").val();;
var proname = $("#prov option:selected").text();
$.ajax({
type: "GET",
url: "ajax/index.aspx?m=list&procode=" + procode + "&proname=" + proname,
dataType: "xml",
success: function (cityxml)
{
GetCountry(cityxml, 0);
}
});
}

//获取县区列表
function GetCountry(cityxml, index)
{
var ctCnt = $(cityxml).find("T").length;
var code = $(cityxml).find("T").eq(index).find("code").text();
var name = $(cityxml).find("T").eq(index).find("name").text();
if (index >= ctCnt) return;
$("#ict").text("共" + ctCnt + "个市,当前是第" + (index + 1) + "个:" + name);
$.ajax({
type: "GET",
url: "ajax/index.aspx?m=listcountry&code=" + code,
dataType: "xml",
success: function (countryxml)
{
//获取当前县区的学校
GetSchool(countryxml, 0);
}
}).then(function ()
{
index++;
GetCountry(cityxml, index);
});
}

//获取学校列表
function GetSchool(countryxml, index)
{
var ctCnt = $(countryxml).find("T").length;
var code = $(countryxml).find("T").eq(index).find("code").text();
var name = $(countryxml).find("T").eq(index).find("name").text();
if (index >= ctCnt) return;
$("#icn").text("共" + ctCnt + "个县区,当前是第" + (index + 1) + "个:" + name);
$.ajax({
type: "GET",
url: "ajax/index.aspx?m=listschool&code=" + code,
dataType: "xml",
success: function (xml)
{
//获取当前县区的学校
$("#ics").text("当前区共" + $(xml).text() + "个学校!");
}
}).then(function ()
{
index++;
GetSchool(countryxml, index)
});
}
</script>
</body>
</html>





...全文
923 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
三碗猪脚 2020-02-12
  • 打赏
  • 举报
回复
这个程序就是维护这个数据库的,不断的在更新,所以有这方面的业务需要
Ta曰丿、她活 2020-01-12
  • 打赏
  • 举报
回复
引用 4 楼 文盲老顾 的回复:
几百年不变一次的数据,直接做成js引用,连ajax都不要
正解,写一个方法,按照规格的格式输出数据,添加到js里面
HQChart 2019-12-02
  • 打赏
  • 举报
回复
把所有数据, 都打包到一个json文件中, 直接下载了, 前端用这个数据做下三层循环嵌套。 每次都请求多麻烦。
文盲老顾 2019-12-02
  • 打赏
  • 举报
回复
几百年不变一次的数据,直接做成js引用,连ajax都不要
Cao_Mary 2019-12-01
  • 打赏
  • 举报
回复
先不用then,试试ajax同步执行能不能满足你的需求:async:false

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧