2016-09-29 21 views
0

我有我的javascript的順序問題,我敢肯定,這是很容易的:使用的功能一個JavaScript變種 - 順序問題

我要檢查一個變量是什麼(使用if語句) ,然後將其從另一變種,或者從一個txt文件中的值

到目前爲止,我可以加載該文件,並設置VAR(我可以在控制檯檢查)成功

然而,後面的腳本部分不會等待var被設置,所以var不會被使用,導致var「cleanTradeDate」的錯誤。

我的問題是,下面是否正確,或者我應該以不同的方式構造var。如何讓後續代碼等待/使用「cleanTradeDate」值?

下面是代碼樣本:

var URLTradeDate = document.URL.substring(document.URL.search('tradeDate=') + 10, document.URL.search('tradeDate=') + 22); 
var cleanTradeDate; 
$(document).ready(function() { 
if (URLTradeDate == '') { 
    $.get('data/0.max_trade_date.txt', function(maxTradeDate) { 
     cleanTradeDate = maxTradeDate.replace(/[\n\r]+/g, ''); 
    }); 
} else { 
    cleanTradeDate = URLTradeDate; 
} 

$("#datepicker").datepicker({dateFormat: 'yy-mm-dd'}); 
$("#datepicker").datepicker('setDate', cleanTradeDate); 
}); 
+0

順便說一句,獲得正確的日期似乎是更好的應在服務器端 – Bergi

+0

解決了這一需要解決的問題!我只是將$ .get函數中的所有後續代碼都集成在一起...... – user1758908

+0

,但只有在找不到'URLTradeDate'的情況下才能工作。看看我的答案,瞭解如何讓兩個案例無需複製代碼 – Bergi

回答

0

$不用彷徨是異步的(意味着代碼不會等待它執行之前完成),所以你想要的東西更像是:

var URLTradeDate = document.URL.substring(document.URL.search('tradeDate=') + 10, document.URL.search('tradeDate=') + 22); 
$(document).ready(function() { 
    if (URLTradeDate == '') { 
     $.get('data/0.max_trade_date.txt', function(maxTradeDate) { 
      setTradeDate(maxTradeDate); 
     }); 
    } else { 
     setTradeDate(URLTradeDate); 
    } 
}); 

function setTradeDate(tradeDate){ 
    tradeDate = tradeDate.replace(/[\n\r]+/g, ''); 
    $("#datepicker").datepicker({dateFormat: 'yy-mm-dd'}); 
    $("#datepicker").datepicker('setDate', tradeDate); 
} 

這樣,一旦數據從$不用彷徨收到,你調用一個函數「setTradeDate」那臺日期選擇器。

編輯:移動了setTradeDate函數內的maxTradeDate的格式,並修復了我注意到的一些錯誤。

+1

如果您使用帶參數的函數,則應該完全省略現在不需要的'cleanTradeDate'變量 – Bergi

+0

您是對的,謝謝:) – DibsyJr

+1

謝謝你們 - 會考慮使用這個 – user1758908

2

這不是變量聲明的地方,而是it's filled asynchronously。您更好的使用承諾:

$(document).ready(function() { 
    var index = location.search.indexOf('tradeDate='); 
    var URLTradeDate = location.search.slice(index + 10, index + 22); 
    var promise = (index == -1 || URLTradeDate == '') 
     ? $.get('data/0.max_trade_date.txt').then(function(maxTradeDate) { 
      return maxTradeDate.replace(/[\n\r]+/g, ''); 
     }); 
     : $.when(URLTradeDate); 
    promise.then(function(cleanTradeDate) { 
     $("#datepicker").datepicker({dateFormat: 'yy-mm-dd'}); 
     $("#datepicker").datepicker('setDate', cleanTradeDate); 
    }); 
});