2012-06-22 282 views
0
$('form').submit(function() { 
    $.post(url, $(this).serialize(), 'validate'); 
    return .....; 
}); 

function validate(data) { 
    return data; 
} 

我需要從提交函數返回validate()提供的(數據)結果。我怎麼做?如何使提交的返回值等到ajax返回結果?從函數返回一個回調函數的返回值(嵌套函數)?

+0

只有在成功完成AJAX請求後,'$ .post'中的'validate()'函數纔會觸發。你所做的是對的。現在你面臨的問題是什麼? –

回答

0

你不能那樣做,因爲它是異步的。

你可以這樣做:

$('form').submit(function(e) { 
    var form = this; 
    e.preventDefault(); //Prevent the form from submitting 

    $.post(url, $(this).serialize(), function(data){ 
     if(validate(data)) { 
      form.submit(); //Now submit the form. Please note `form` is not a jQuery object the event handler is not triggered. 
     } 
    }); 
}); 
+1

不會form.submit()再次調用匿名函數,因此再次觸發ajax請求? –

+0

@ГеоргиГеоргиевform.submit()調用窗體的本地提交方法,因爲'form'是一個DOM元素而不是jQuery對象。如果它是一個jQuery對象,你會是對的,因爲在jQuery對象上調用'submit()'會觸發jQuery事件+調用本地'submit'方法。 – Esailija

0

呀,方法看起來混亂。也許你應該在頁面加載時初始化一個變量爲False,並且在validate函數返回成功的數據後將其設置爲true。它可以像這樣在一個條件內設置:

$('form').submit(function(e) { 
    if (!postflag) { 
     e.preventDefault(); 
      $.post("foo.php",serialize(),function(data) { 
        if (validate(data)) { 
          postflag = true; 
        } 
      }); 
     } 
    if (postflag) { 
     $(this).submit(); 
    }   
    });