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

时间:2016-01-02 15:37:03

标签: javascript jquery ajax

而不是对所有误导性的标题抱歉,我会尝试更好地解释。我的客户填写一份包含个人信息的表格,这些信息是从调用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语句中输入,因此在失败验证中。但我跑了这个测试:

  1. FrontendBook.validateCustomerForm
  2. 中打印console.log()的结果
  3. 检查条件
  4. 的说明

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

1 个答案:

答案 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 - 简化演示