jQuery:等到$ .get()返回值

时间:2016-06-14 14:24:08

标签: javascript jquery get

这是我的代码示例

var formValidate = function() {
  var url = 'someurl';
  var checkC = function (url, callback) {
    $.get(url, function( data ) {
      if(data.indexOf('OK') == 0) return callback('OK');
    })
  };
  checkC(url, function(data) {
    if(data == 'OK') return false;
  });
  return true;
}

在这个问题Wait for jQuery $.get function to finish before running code中,我的代码非常类似于Adam Rackis。但不幸的是功能不等待数据返回。 formValidate()只返回true。我希望在从表单

向服务器发送数据之前使用此函数来检查某些条件
form.on('submit', function(){
  if(formValidate()) form_send();
})

有人可以告诉我上面的代码在哪里错了吗?

2 个答案:

答案 0 :(得分:1)

第一个问题是formValidate()无论ajax请求如何都会同步返回true

var formValidate = function() {
  .
  .
  .
  return true;
}

如果您希望等待从回调函数返回您的值。在这里,您应该从成功回调中调用form_send(),使其等待异步调用。而且,如果没有checkC(),你实际上可以更简单。稍微更改代码并使用done和fail promises:

var formValidate = function () {
  var url = 'someurl';

  $.get(url)
        .done(function (data) {
            if (data.indexOf('OK') == -1) {
                console.log("error");
                return;
            } 
            form_send();
        })
        .fail(function () {
            console.log("error");
            return;
        })
}

答案 1 :(得分:1)

你不能这样做,因为$ .get是异步调用的。

var formValidate = function() {
   var url = 'someurl';
   var checkC = function (url, callback) {
       $.get(url, function( data ) {
           if(data.indexOf('OK') == 0) return callback('OK');
       });
   };


   checkC(url, function(data) {
      // this return to this enclosing callback function but not formValidate
      if(data == 'OK') return false;
   });

   //this is the only return statement for formValidate function
   return true;
}

我建议的解决方法是在回调中调用你的form_send(),例如,

form.on('submit', formValidate);

对于你的formValidate,

var formValidate = function () {
    var url = "someurl";
    $.get(url, function( data ) {
      if(data.indexOf('OK') == 0) {
          form_send();
      }
    });
};