2015-10-27 92 views
0

我有一個JavaScript文件,我期望一次又一次調用相同的getJSON調用。例如:從函數返回getJSON響應

$(document).ready(function() { 
    $('#validate').click(function() { 
    var url; 
    url = 'http://myurl'; 
    $.getJSON(url, function(data) { 
     if (data[0].response.status === 'ok') { 
     $('#validate_text').html("data validated"); 
     } else { 
     $('#validate_text').html("data Not Valid"); 
     } 
    }); 
    }); 
}); 

這工作我想重構這個喜歡的東西:

$(document).ready(function() { 
    $('#validate').click(function() { 
    var url; 
    url = 'http://myurl'; 
    data = myjsonfunction(url); 
     if (data[0].response.status === 'ok') { 
     $('#validate_text').html("DLS/NTS Validated"); 
     } else { 
     $('#validate_text').html("DLS/NTS Not Valid"); 
     } 
    }); 
}); 

其中myjsonfunction(url)是一個獨立的功能,我可以通過URL,並將其返回原始的getJSON數據。我已經看到了幾個例子,你在getJSON塊的外面設置了一個已經定義好的變量,但我似乎無法得到任何這些工作。

+0

可能重複調用(HTTP [如何返回從異步調用的響應?]://計算器。 COM /問題/ 14220321 /如何對返回的響應,從-的異步調用)。總之,你不能直接返回價值,但你可以返回承諾 – Phil

+0

嗯......我需要考慮這一點。我明白你在說什麼。當我直接調用getJSON時,我的代碼等待響應,但是如果我嘗試從外部調用它,它會超時失敗,因爲除非外部函數立即返回結果(它不能),否則數據的值總是未定義的(這就是我當我嘗試它時看到了。 –

回答

0

嘗試使用.then(),作爲data是異步的,如果能夠同步響應之前從myjsonfunction(url)

$(document).ready(function() { 
    $('#validate').click(function() { 
    var url; 
    url = 'http://myurl'; 
    data = myjsonfunction(url); 
    data.then(function(response) { 
     if (response[0].response.status === 'ok') { 
     $('#validate_text').html("DLS/NTS Validated"); 
     } else { 
     $('#validate_text').html("DLS/NTS Not Valid"); 
     } 
    }, function err(jqxhr, textStatus, errorThrown) { 
     console.log(erroThrown) 
    }) 
    }); 
});