簡體   English   中英

getJSON在函數中不起作用,它返回一個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM