我想在點擊提交按鈕時驗證WordPress帖子上的用戶條目,顯示錯誤消息是否存在問題,如果一切正常,請提交表單。我有一個PHP函數做檢查,如果form_data
中的數據是OK的,返回true
,否則有一些錯誤代碼。下面的JavaScript發出AJAX請求,應該繼續提交成功後,檢查的形式,但它並不:如何在AJAX調用後繼續表單提交?
jQuery(document).ready(function() {
jQuery('#post').submit(function() {
var form_data = jQuery('#post').serializeArray();
var data = {
action: 'ep_pre_submit_validation',
security: '<?php echo wp_create_nonce('pre_publish_validation'); ?>',
form_data: jQuery.param(form_data),
};
var proceed = false;
jQuery.post(ajaxurl, data, function(response) {
if (response.indexOf('true') > -1 || response == true) {
proceed = true;
} else {
alert("Error: " + response);
proceed = false;
}
});
jQuery('#ajax-loading').hide();
jQuery('#publish').removeClass('button-primary-disabled');
return proceed; //breakpoint here makes the code run
});
});
的代碼是從WPSE question,這原本並沒有爲我工作,爲適應該表格沒有提交。我發現如果綁定到.submit()
的jQuery函數返回true,表單應該被提交,所以這就是我試圖實現的。使用上面的代碼,它起初似乎沒有工作(表單在沒有錯誤時沒有提交),但如果在Firebug proceed
的密切檢查下,如果在return proceed
行處插入了斷點,似乎會得到正確的結果。它按照預期的方式工作,有效數據只有,如果我在等待斷點時等待它,然後繼續執行。如果出現錯誤,則發出警報沒有問題。
處理這個問題的最佳方法是什麼?
編輯基於@Linus
下面回答,下面的代碼可以使用兩種有效和無效的數據:
jQuery(document).ready(function() {
jQuery('#post').submit(function() {
if(jQuery(this).data("valid")) {
return true;
}
var form_data = jQuery('#post').serializeArray();
var data = {
action: 'ep_pre_submit_validation',
security: '<?php echo wp_create_nonce('pre_publish_validation'); ?>',
form_data: jQuery.param(form_data),
};
jQuery.post(ajaxurl, data, function(response) {
if (response.indexOf('true') > -1 || response == true) {
jQuery("#post").data("valid", true).submit();
} else {
alert("Error: " + response);
jQuery("#post").data("valid", false);
}
//hide loading icon, return Publish button to normal
jQuery('#ajax-loading').hide();
jQuery('#publish').removeClass('button-primary-disabled');
});
return false;
});
});
輝煌的解決方案!我起初掙扎了一下,但後來我意識到它不工作,因爲在WordPress中,jQuery必須被稱爲'jQuery'而不是'$'... – englebip 2012-02-17 16:29:25
哇,你剛剛保存了我的客廳窗口,我的電腦和我最後一絲耐心。我無法理解(但仍然沒有)爲什麼ajax事件不能阻塞,然後發出完成信號並允許定期進行表單處理。這工作,但我不明白爲什麼這種情況不會出現時,測試權力,這是。 – eggmatters 2013-02-02 08:36:35