2016-06-14 113 views
0

這是我的代碼示例

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; 
} 

我的代碼是非常相似亞當Rackis在這個問題Wait for jQuery $.get function to finish before running code。但不幸的是函數不會等待數據返回。 formValidate()只是返回true。我想要使​​用此功能,從形式將數據發送到服務器

form.on('submit', function(){ 
    if(formValidate()) form_send(); 
}) 

有人能告訴我前要檢查一些條件在那裏是我錯在上面的代碼?

+0

請問您檢查您的小提琴,似乎HTML在那裏丟失。 – Deep

+0

我在這裏發佈代碼,確實沒有必要在html中,只是爲了讓'formValidate'等待直到$ .get()返回一些數據... – user1128677

+0

你正在調用'formValidate''沒有'()' –

回答

1

第一個問題是formValidate()返回true同步,無論ajax請求。

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

如果你想等待從回調函數返回你的值。在這裏,您應該從成功回調呼叫form_send(),使其等待異步呼叫。而且,如果沒有checkC(),您實際上可以更簡單。更改代碼了一下,使用完成,失敗承諾:

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

你不能做到這一點,因爲$不用彷徨異步調用。

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(); 
     } 
    }); 
};