返回函数返回'undefined'

问题描述:

我有一个函数应该返回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

$.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,我用一个完美的小提琴更新了我的解决方案。 –

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