停止代码执行,直到 XMLHttpRequest 循环完成
Posted
技术标签:
【中文标题】停止代码执行,直到 XMLHttpRequest 循环完成【英文标题】:stop code execution until XMLHttpRequest cycle is complete 【发布时间】:2017-02-24 07:30:27 【问题描述】:您的 Google 地图代码结构如下所示:
<script>
function initMap()
var locations =
[
lat: -31.563910, lng: 147.154312,
lat: -33.718234, lng: 150.363181
]
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=API-key&callback=initMap" >
</script>
问题是,你想通过调用服务器来填充locations
(使用 XMLHttpRequest ,即一个普通的 javascript AJAX 调用,因为你不想使用 jQuery)。
您不希望在成功填充locations
之前执行第二个脚本块(对Google Maps API 的调用)。
您将如何通过以下任何方式实现这一目标:
另外,a semaphore, as suggested here 是否可行?
【问题讨论】:
【参考方案1】:function initMap()
var xhr= new XMLHttpRequest();
xhr.onreadystatechange = function()
if (this.readyState == 4 && this.status == 200)
LoadGoogleMaps();
;
xhr.open();//<-- Your parameters go here
xhr.send();
function LoadGoogleMaps()
// Logic to load maps
标准 XHR 文档可在此处找到:http://www.w3schools.com/xml/ajax_intro.asp
信号量在概念上是一个不错的想法,但有时很难实现。通常在 javascript 中,最好的做法是尽可能使用回调或承诺。
【讨论】:
以上是关于停止代码执行,直到 XMLHttpRequest 循环完成的主要内容,如果未能解决你的问题,请参考以下文章