先說一下我遇到的問題吧,我之前的一個函數想調用上一個函數的返回值,但是它的返回值一直為空,後來翻了一些資料才明白是非同步請求在作怪,不多說,看例子,這是我之前有返回值函數的代碼: Java代碼 function get_no_order_array() { var order_info = show_ ...
先說一下我遇到的問題吧,我之前的一個函數想調用上一個函數的返回值,但是它的返回值一直為空,後來翻了一些資料才明白是非同步請求在作怪,不多說,看例子,這是我之前有返回值函數的代碼:
Java代碼- function get_no_order_array() {
- var order_info = show_order();
- var order = [];
- $.getJSON("../JSON/customers.json", function (date) {
- date["man"].forEach(function (person) {
- if (order_info.k_obj[person] == undefined) {
- order.push(person);
- }
- })
- });
- return order;
- }
後來發現列印的數組order 一直為空,以下是改正後的代碼:
Java代碼- function get_no_order_array() {
- var order_info = show_order();
- var order = [];
- $.ajaxSettings.async = false;//在執行之前加$.ajaxSettings.async = false; (同步執行)
- $.getJSON("../JSON/customers.json", function (date) { //<span style="line-height: 1.5;">$.getJSON不懂的話可以看一下我之前的博客,或是專門學習一下 “JSON”</span>
- date["man"].forEach(function (person) {
- if (order_info.k_obj[person] == undefined) {
- order.push(person);
- }
- })
- });
- $.ajaxSettings.async = true;//執行你的代碼之後及時恢復為$.ajaxSettings.async = true; (非同步執行)
- return order;
- }
在迴圈之前加一個$.ajaxSettings.async = false; 表示同步執行,這樣他就會按照順序執行了。
同時執行多個$.getJSON() 數據混亂的問題的解決
在執行之前加$.ajaxSettings.async = false; (同步執行)
執行你的代碼之後及時恢復為$.ajaxSettings.async = true; (非同步執行)
不然影響別的地方的需要非同步執行的代碼。
example:
$.ajaxSettings.async = false;
$.getJSON(url, data, function(data){ });
$.getJSON(url, data, function(data){ });
$.getJSON(url, data, function(data){ });
......
$.ajaxSettings.async = true;