【发布时间】:2012-02-17 15:33:02
【问题描述】:
我想在点击提交按钮时验证 WordPress 帖子上的用户条目,如果有问题则显示错误消息,如果一切正常则提交表单。我有一个 PHP 函数进行检查,如果 form_data 中的数据正常,则返回 true,否则返回一些错误代码。以下 JavaScript 发出 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;
});
});
【问题讨论】:
标签: javascript ajax jquery jquery-post