【发布时间】:2018-02-22 22:31:52
【问题描述】:
这里是JS新手,尝试通过jQuery的$.get()创建一些对API的简单调用并处理接收到的数据。
问题是 - 显然 - 这个函数被调用......好吧,无论何时。但不是在我期望它被调用的时候(即它在代码中的位置)。我会很好的
- 在
get(...)内做所有事情,只要我可以使用父作用域中的循环、计数器等(就像我习惯的那样) - 首先从
get()调用中获取接收到的数据,然后再对其进行处理
但这似乎都不可能。
我想这就是人们在谈论 AJAX 中的异步 JavaScript 时的意思。很好很好,但是我该如何解决我的问题呢?
$(document).ready(function() {
for (var i = 0; i < 5; i++) {
console.log(i);
$.get("test.php", function(data) {
console.log(i);
});
console.log(i);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
给予
00 11 22 33 44 44444
但我希望它是
000 111 222 333 444
我希望这是有道理的。
额外问题:我最好使用 PHP 来获取here 所述的数据,然后将其转换为 JS,如here 所述并按计划继续?
编辑/解决方案:
我的额外问题最终导致我提出了这样的问题(简化):
<script>
<?php
$data = array();
for ($row = 0; $row < 5; $row++) {
$response = json_decode(file_get_contents("test.php?access_token=".$row));
array_push($data,$response);
}
$js_data = json_encode($data);
echo "var data_all = ". $js_data .";\n";
?>
$(document).ready(function(){
//do JS stuff with the data_all array
});
</script>
这样做的好处是不会将访问令牌放在所有人的视线范围内。
如果我的方法有问题,我很乐意在 cmets 中阅读相关内容,否则我会在找到可行的解决方案时考虑完成此问题。感谢您指出这个问题的副本,这是一个有趣的阅读。
【问题讨论】:
-
主要问题:在一个循环中触发多个 ajax,实际上是非顺序的(想想赛马)。哎呀,你甚至可能会在 '4' 之后发现一个 '0' ;) 额外问题:有点取决于你在做什么,你从哪里获得你需要的数据,以及你想要什么。
-
回调被异步调用的事实并不是导致您的问题的原因,相反,导致您的问题的原因是它们直到循环完成后一段时间才被调用。跨度>
标签: javascript php jquery function asynchronous