放置用于AJAX回调的Add_action()?

时间:2015-05-08 作者:jchwebdev

这可能是一个很难回答的问题,但我很困惑。

我创建了一个简单的WP模板页面。通过ajax回调将表单更新到db的表单。在底部,我放置了add\\u action()语句,以便在表单通过WP-AJAX提交时触发回调函数。

我很快意识到回调函数(add\\u action()语句中的函数)没有启动。我的jQuery中“done”函数的响应代码是0。。。这意味着WP-AJAX无法挂接到回调函数。

add_action(\'wp_ajax_updateuserprofileAction\',        \'updateuserprofileAction\');
add_action(\'wp_ajax_nopriv_updateuserprofileAction\', \'updateuserprofileAction\');


function updateuserprofileAction($args) {
$nonce = $_POST[\'send\'];

if ( !wp_verify_nonce($_POST[\'send\'],\'jch-ajax-update-userprofile\') ) {
  echo $nonce;
  die ( $nonce ); }

// Read the form values
$success = false;
$senderFirstName = isset( $_POST[\'senderFirstName\'] ) ? preg_replace( "/[^\\.\\-\\\' a-zA-Z0-9]/", "", $_POST[\'senderFirstName\'] ) : "";
$senderLastName = isset( $_POST[\'senderLastName\'] ) ? preg_replace( "/[^\\.\\-\\\' a-zA-Z0-9]/", "", $_POST[\'senderLastName\'] ) : "";   
$senderEmail = isset( $_POST[\'senderEmail\'] ) ? preg_replace( "/[^\\.\\-\\_\\@a-zA-Z0-9]/", "", $_POST[\'senderEmail\'] ) : "";

// If all values exist, send the email
if ( $senderFirstName && $senderLastName && $senderEmail) {

    global $current_user;
    get_currentuserinfo();

    update_user_meta( $current_user->ID, \'phone\', $_POST[\'senderPhone\']);

    if($success == 1)
    {       
      die(\'success\');
    }
}
else {
    die( \'ERROR\');
}
}
出于沮丧,我将回调函数和add\\u action语句移动到一个插件中,该插件也使用WP-AJAX并立即。。。它起作用了。

所以我的问题是:为什么?为什么不能将add\\u action()语句放入模板页?或者换一种说法:在哪里可以放置add\\u action()的“规则”是什么?

理想情况下,我希望将add\\u action()和回调函数与模板页保持在同一个文件中。有没有办法做到这一点?

1 个回复
SO网友:fuxia

发送AJAX请求时,wp-admin/admin-ajax.php 调用,而不是模板文件。这个单独的请求不了解所有现有模板中的所有现有代码,因为它们甚至没有包含在内。

包含内容:主题functions.php 和插件文件。这就是回调在插件中工作的原因。

经验法则是:模板不应该包含业务代码。没有函数或类声明,没有回调注册。它们是模板,应该只向数据添加标记,而不是其他内容。

结束

相关推荐

防止wp_debug污染插件内的AJAX

我遇到了一个问题wp_debug 通知扰乱了我的ajax响应。法典suggests 使用ob_clean 在返回或回应之前:要解析AJAX,必须通过管理AJAX重新加载WordPress。php脚本,这意味着在初始页面加载中遇到的任何php错误也将出现在AJAX解析中。如果启用了error\\u报告,这些将被回送到输出缓冲区,从而用错误消息污染AJAX响应。因此,在调试Ajax时必须小心,因为返回的任何PHP通知或消息都可能会混淆结果的解析或导致Javascript出错。如果您无法消除这些消息,并且必须在