我有很多函数可以对一些字段进行实时ajax检查;例如,在email
字段填充后,它将触发ajax检查,以查看该电子邮件是否已被其他帐户使用。我还想使用相同的函数对发布到表单的值进行双重检查。目前,情况如下:
function ajax_checkEmailAddress($passedEmail = false) {
$isAjaxRequest = ($passedEmail === false);
$sentEmail = (!$isAjaxRequest) ? $passedEmail : sanitize_email($_POST[\'email\'], true);
if (email_exists($sentEmail)) {
$jsonArray[\'response\'] = \'error\';
$jsonArray[\'message\'] = __(\'This email address is already in use.\', \'ajaxSignup\');
} else {
$jsonArray[\'response\'] = \'success\';
}
if ($isAjaxRequest) {
wp_send_json($jsonArray);
} else {
return $jsonArray;
}
}
随后,我有了另一个处理完整提交表单的ajax功能:
function ajax_processForm() {
$email = $_POST[\'email\'];
$checkedEmail = ajax_checkEmailAddress($email);
if ($checkedEmail[\'response\'] == \'success\') {
// Continue processing the form actions
} else {
wp_send_json($checkedEmail);
}
}
add_action(\'wp_ajax_processForm\', \'ajax_processForm\');
add_action(\'wp_ajax_nopriv_processForm\', \'ajax_processForm\');
我不想重复所有的错误检查函数,因此
$passedEmail
参数检查,默认为
false
; 这样,函数应该知道它是由ajax调用还是由内部函数调用,并且可以
return
函数的结果数组,而不是
wp_send_json
, 这会
die()
.
但是,使用标准ajax侦听器:
add_action(\'wp_ajax_checkEmailAddress\', \'ajax_checkEmailAddress\');
add_action(\'wp_ajax_nopriv_checkEmailAddress\', \'ajax_checkEmailAddress\');
。。。它们似乎总是发送一个空参数,所以
$passedEmail
从不默认为
false
. 即使我尝试使用无意义的默认值,它也会被覆盖:
function ajax_checkEmailAddress($passedEmail = \'wibble\') {
wp_send_json($passedEmail); // Returns \'\' when called via ajax
}
很遗憾,我不能使用
DOING_AJAX
确定字段检查功能是否应
return
或
wp_send_json
, 因为表单检查函数本身是通过ajax调用的,所以
DOING_AJAX
始终返回
true
.
我有半打针对不同字段类型的“实时检查”函数,所以我真的不想将它们全部复制。有没有办法wp_ajax
是否发送空参数?还是一种更整洁的处理方式?
这听起来与年提出的问题类似this old trac ticket, 但这并不完全相同,只是讨论了在3.4和;3.5。
最合适的回答,由SO网友:indextwo 整理而成
最后,我只是将实际验证抽象为另一个函数:
function ajax_checkEmailAddress($passedEmail = false) {
$sentEmail = sanitize_email($_POST[\'email\'], true);
$jsonArray = validateEmailAddress($passedEmail);
wp_send_json($jsonArray);
}
add_action(\'wp_ajax_checkEmailAddress\', \'ajax_checkEmailAddress\');
add_action(\'wp_ajax_nopriv_checkEmailAddress\', \'ajax_checkEmailAddress\');
function validateEmailAddress($email) {
if (email_exists($email)) {
$jsonArray[\'response\'] = \'error\';
$jsonArray[\'message\'] = __(\'This email address is already in use.\', \'ajaxSignup\');
} else {
$jsonArray[\'response\'] = \'success\';
}
return $jsonArray;
}
这样,
validateEmailAddress
可以从另一个PHP函数调用而不会出现问题,ajax函数不必尝试解密它是否是直接的ajax调用。
我还是不知道为什么wp_ajax
发送一个空参数,但我很想知道。