而不是对所有误导性的标题抱歉,我会尝试更好地解释。我的客户填写一份包含个人信息的表格,这些信息是从调用php函数的ajax请求中验证的。如果验证成功,则此php函数返回SUCCESS
,而不是返回异常。现在当用户点击下一个按钮时,javascript代码调用此函数:
if(!FrontendBook.validateCustomerForm())
{
return; //FAIL
} else
{
//do stuff
}
validateCustomerForm
函数包含:
var postUrl = GlobalVariables.baseUrl + 'backend_api/ajax_save_customer';
var postData = { 'customer': JSON.stringify(GlobalVariables.customerData) };
$.post(postUrl, postData, function(response)
{
if(response.status == "SUCCESS")
{
return true;
}
else
{
return false;
}
}, 'json');
现在,在浏览器控制台中,我正确地看到了响应内容,如果我在response.status == "SUCCESS"
内发出警报,则会正确显示警报。
最初我不明白为什么在if(!FrontendBook.validateCustomerForm())
代码在return语句中输入,因此在失败验证中。但我跑了这个测试:
FrontendBook.validateCustomerForm
console.log()
的结果
在console.log
我得到undefined
,当然条件声明属于return; //FAIL
。
也许这是时间问题?有人可以解释为什么当我在特定比赛中返回true或false时函数返回undefined?
答案 0 :(得分:1)
您似乎误解了承诺和此函数调用的异步性质。请注意以下方式我们可以做到这一点...
// declaration
function validateCustomerForm() {
var postUrl = GlobalVariables.baseUrl + 'backend_api/ajax_save_customer';
var postData = { 'customer': JSON.stringify(GlobalVariables.customerData) };
return $.post(postUrl, postData); // return promise object
}
// usage
validateCustomerForm().done(function(response) { // resolve promise
if(response.status == "SUCCESS")
/*...*/
});
查看jQuery deferred api以获取更多信息 - 因为我们将从您的函数返回一个承诺,然后再解析它。
JSFiddle Link - 简化演示