$('form').submit(function() {
$.post(url, $(this).serialize(), 'validate');
return .....;
});
function validate(data) {
return data;
}
我需要從提交函數返回validate()提供的(數據)結果。我怎麼做?如何使提交的返回值等到ajax返回結果?從函數返回一個回調函數的返回值(嵌套函數)?
$('form').submit(function() {
$.post(url, $(this).serialize(), 'validate');
return .....;
});
function validate(data) {
return data;
}
我需要從提交函數返回validate()提供的(數據)結果。我怎麼做?如何使提交的返回值等到ajax返回結果?從函數返回一個回調函數的返回值(嵌套函數)?
你不能那樣做,因爲它是異步的。
你可以這樣做:
$('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.
}
});
});
不會form.submit()再次調用匿名函數,因此再次觸發ajax請求? –
@ГеоргиГеоргиевform.submit()調用窗體的本地提交方法,因爲'form'是一個DOM元素而不是jQuery對象。如果它是一個jQuery對象,你會是對的,因爲在jQuery對象上調用'submit()'會觸發jQuery事件+調用本地'submit'方法。 – Esailija
呀,方法看起來混亂。也許你應該在頁面加載時初始化一個變量爲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();
}
});
只有在成功完成AJAX請求後,'$ .post'中的'validate()'函數纔會觸發。你所做的是對的。現在你面臨的問題是什麼? –