Ajax请求在js检查后返回响应

Ajax request return the response after js check

本文关键字:返回 响应 检查 js 请求 Ajax      更新时间:2023-09-26

我不会为误导性的标题感到抱歉,我会努力解释得更好。我的客户用个人信息填写了一个表单,这些信息通过调用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语句中输入,在fail验证中也是如此。但我做了这个测试:

  1. console.log()中打印FrontendBook.validateCustomerForm的结果
  2. 检查条件所在的语句

console.log中,我得到了undefined,当然条件语句也属于return; //FAIL
也许这是时间问题?有人可以解释为什么当我在特定的比赛中返回true或false时,函数返回undefined?

您似乎误解了promise和此函数调用的异步性质。按照以下方法我们可以做到这一点。。。

// 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延迟api以获取更多信息,因为我们将从您的函数返回一个promise,然后稍后进行解析。


JSFiddle链接-简化的演示