[英]getJSON doesn't work in a function it returns a value
我有此代碼,它可以完美地工作:
$.getJSON('/admin/get_acronyms', function(data) {
//load JSON
$.each(data, function(key, val) {
if(key === 'error') {
alert(val);
} else {
//Update typeahead source
autocomplete.data('typeahead').source = val;
}
});
});
我想在此函數內將其最小化以進行代碼重用:
var getAndAppendJSON = function(url) {
var result;
$.getJSON(url, function(data) {
$.each(data, function(key, val) {
return val;
});
});
};
var arr = getAndAppendJSON('/admin/get_acronyms');
autocomplete.data('typeahead').source = arr;
但是此功能不起作用:(。
JS控制台向我顯示var arr未定義
有人知道為什么嗎? 提前致謝。
getAndAppendJSON
實際上不返回任何內容。 它啟動一個AJAX調用,該調用在調用完成后完成。 您應該做的是在回調中使用返回的數據:
var getAndAppendJSON = function(url) {
var result;
$.getJSON(url, function(data) {
autocomplete.data('typeahead').source = data;
});
};
您的請求將花費一些時間才能往返服務器。 這就是處理程序的用途,以便在不確定的時間段內將數據返回給您之后,便能夠使用該數據。
因為AJAX是“異步的”。 您有AJAX成功處理程序return val
,但是您要返回到哪里?
執行時
var arr = getAndAppendJSON('/admin/get_acronyms');
AJAX調用將被發送到服務器,但是該函數沒有返回任何內容。 因此arr
是不確定的。 當AJAX調用從服務器返回時,其余的JS早就進行了。
要完成您要實現的目標,必須在回調函數中進行分配:
var getAndAppendJSON = function(url) {
var result;
$.getJSON(url, function(data) {
autocomplete.data('typeahead').source = data;
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.