所以我这样做:
function loginFunc(userNameOrEmail, passWord){
var emailOrUserNameV = encodeURIComponent(userNameOrEmail);
var passWordV = encodeURIComponent(passWord);
$.getJSON("http://mysite.com/pullData/login.php?callback=?",
{
emailOrUserName: emailOrUserNameV,
passWord: passWordV
},
function(recievedData) {
if(recievedData[0] == 'true'){
return true;
}
else{
return false;
}
});
}
然后我这样做:
$('#loginBtnHtml').click(function(){
var emailVar = $('#email_html').val();
var pwdVar = $('#password_html').val();
if(loginFunc(emailVar, pwdVar)){
alert('good');
}
else{
alert('bad');
}
});
如果我使用loginFunc()
运行alert(recievedData[0]);
它运行良好如何让它返回bool到$('#loginBtnHtml').click();
?
当我这样做进行故障排除时:
$('#loginBtnHtml').click(function(){
var emailVar = $('#email_html').val();
var pwdVar = $('#password_html').val();
var whatIsBeingReturned = loginFunc(emailVar, pwdVar);
alert(whatIsBeingReturned);
});
它以'Undefined'警告......不确定我做错了什么。
答案 0 :(得分:7)
你无法从ajax返回。除非ajax是同步的(不要这样做!) 不能 依赖于以任何特定顺序执行的代码。 需要来自ajax的响应的所有功能都必须在ajax回调中。
function loginFunc(userNameOrEmail, passWord){
...
return $.getJSON("http://mysite.com/pullData/login.php?callback=?",
}
$("#loginBtnHtml").on('click', function () {
//snip
loginFunc(emailVar, pwdVar).done(function (whatIsBeingReturned) {
console.log(whatIsBeingReturned);
});
});
答案 1 :(得分:3)
JSON请求的响应是异步的。 logicFunc()
在JSON请求的响应回调之前返回。
您需要编写一个回调方法来处理响应。类似的东西:
function handleResponse(data){
// do something
}
function loginFunc(userNameOrEmail, passWord){
var emailOrUserNameV = encodeURIComponent(userNameOrEmail);
var passWordV = encodeURIComponent(passWord);
$.getJSON("http://mysite.com/pullData/login.php?callback=?",
{
emailOrUserName: emailOrUserNameV,
passWord: passWordV
},
handleResponse
});
}
答案 2 :(得分:1)
尝试使用回调函数。 AJAX发生ansync,而完成函数不能向包装函数返回值。
function loginFunc(userNameOrEmail, passWord, callbackFn){
var emailOrUserNameV = encodeURIComponent(userNameOrEmail);
var passWordV = encodeURIComponent(passWord);
$.getJSON("http://mysite.com/pullData/login.php?callback=?",{
emailOrUserName: emailOrUserNameV,
passWord: passWordV
}, callbackFn);
}
$('#loginBtnHtml').click(function(){
var emailVar = $('#email_html').val();
var pwdVar = $('#password_html').val();
loginFunc(emailVar, pwdVar, function(recievedData){
alert(recievedData[0]);
});
});