2017-04-21 282 views
2

我有一個函數應該返回truefalse。雖然它返回undefined。任何想法爲什麼?返回函數返回'undefined'

代碼:

verify_acc = function(username, password) { 
    var url = '//api.bos2.cf/?type=verify&username=' + username + '&password=' + password + '&callback=?'; 
    $.getJSON(url, function(data) { 
     success: readData(data) 
    }); 

    function readData(data) { 
     return data['success']; // I have also tried data.success 
    } 
}; 

console.log(verify_acc('jeff', 'doe')); 

任何幫助,將不勝感激。

+1

getJSON中的函數是成功的回調函數。擺脫成功:位。您是否閱讀過http://api.jquery.com/jquery.getjson/ – Snowmonkey

+2

[如何從異步調用返回響應?](/ questions/14220321/how-do-i-return-the-response-from - 異步調用) – Thomas

+0

@Snowmonkey不,我從來沒有讀過。所以擺脫成功:readData(data)''''''data ['success'];''' – csf30816

回答

0

$.getJSON接受成功的第二個參數callback函數。 success回調傳遞返回的數據,返回的數據通常是由JSON結構定義並使用$.parseJSON()方法解析的JavaScript對象或數組。

這裏是working solution.

$.getJSON(url, success); 
function success(data){ 
    console.log(data.success); 
} 

ajax通話結束前返回verify_acc功能,這就是你從ajax呼叫response收到undefined然後。爲此,我們可以實施我們的callback方法。

verify_acc = function(username, password, callback) { 
    var url = '//api.bos2.cf/?type=verify&username=' + username + '&password=' + password + '&callback=?'; 
    $.getJSON(url, success); 
    function success(data) { 
     return callback(data); 
    } 
}; 
verify_acc('jeff', 'doe', function(response){ 
    console.log(response.success); 
}); 

Final Solution.

+0

謝謝。儘管只有在函數中使用'''console.log''時纔有效。當我用'''return''替換'''console.log'''時,它仍然表示未定義。在我的問題''''console.log'''就在那裏,所以你可以看到未定義的。我想用'''return'''。 – csf30816

+0

@ csf30816,看看我的答案。 –

+0

@ csf30816,我用一個完美的小提琴更新了我的解決方案。 –

0

jsBin demo

你已經success回調裏面。您可以使用可選的對象的第一個參數內,但你已經使用了url使你的代碼,而像

$.getJSON(url, readData); 

function readData(data) { 
    console.dir(data); // Open console and just make sure everything is OK 
} 

http://api.jquery.com/jquery.getjson/

此外,由於您正在嘗試使用所謂的verify_acc自定義回調函數你應該提供一個回調,否則當你期待回報的時候,你的請求可能不完整(因此你的data.success可能仍然是未定義的),因爲AJAX調用的異步性質

verify_acc = function(username, password, callback) { // << notice the callback argument 

    var url = 'http://jsbin.com/hokudep.js'; 

    $.getJSON(url, readData); 

    function readData(data) { 
     console.log(data); 
     return callback(data);// use a callback! 
    } 
}; 


verify_acc('jeff', 'doe', function(returnedData){ 
    console.log(returnedData.success); 
}); 
+1

謝謝我會嘗試 – csf30816

+0

仍然返回'''undefined''' – csf30816

+0

不,我沒有,但我刷新了頁面,它在那裏。我會嘗試。謝謝 – csf30816