在带有promise

时间:2017-07-21 05:32:14

标签: jquery ajax

我已经多次尝试使用jQuery ajax调用,但在更新之前它会返回值。我已经google了它并尝试了许多解决方案,没有人为我工作,我总是得到未定义的值,因为函数返回值在ajax调用完成之前。任何帮助都会很感激,

这是我的代码

$(document).ready(function() {
  console.log(secondvalidation());
});

function onemorevalid() {
  console.log("working");
  //this ajax call return 1
  return jQuery.ajax({
    url: 'handler/email.php',
    method: 'POST',
  });

}


function secondvalidation() {
  onemorevalid1 = new onemorevalid();
  onemorevalid1.done(function(data) {
    console.log("data " + data);
    return data;
  });
}

控制台上的输出是

working
undefined
data 1

1 个答案:

答案 0 :(得分:1)

你正在用一种方法制造一个物体。从根本上说这是错误的。此外,如果您需要将ajax调用的值传递给之后调用的代码,则可以向查询添加async:false,以便代码等待ajax响应。

确保在文档就绪函数中调用ajax方法后调用other_function()

所以我认为你需要的是:

$(document).ready(function(){
var requested_data;


        var request = $.ajax({
      url:'handler/email.php',
          method:'POST',
          async:false,
          dataType: 'text'
    });

    request.done(function(data) {
       console.log("data " + data);
 requested_data = data
    });



 function other_function(){
console.log("toing_toing: " + requested_data);
}
other_function();  
   });

这是此代码的working example fiddle

请注意,还有其他方法可以实现per this answerasync:false可能导致您的脚本冻结,直到请求完成,因此如果请求花费很长时间会导致错误的UI体验。