如何将AJAX请求挂钩到PHP回调中?

时间:2012-01-23 作者:Kate Ray

按照此处的指示操作http://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Administration_Side

我编写了以下代码:

已编辑为包含模具(),仍不工作

function my_button() {
echo
"<script type = \'text/javascript\'>
function ajaxRequest(){
    jQuery(document).ready(function(jQuery) {
        var sendData = {};
        sendData[\'action\'] = \'my_action\';
        sendData[\'external_id\'] = \'$postID\';
        sendData[\'title\'] = \'$post_title\';
        sendData[\'content\'] = \'$post_content\';
        jQuery.ajax({
            type: \'POST\',
            url: \'http://lvh.me:3000/s/wp\',
            xhrFields: {
                withCredentials: true
            },
            headers: {\'X-Requested-With\': \'XMLHttpRequest\'},
            data: sendData,
            error: function(jqXHR){
                console.log(jqXHR.responseText);
            },
            success: function(data){
                window.open(data[\'link\']);
            }
        });
    })
};
</script>
<input type=\'button\' onclick=\'ajaxRequest()\' value=\'Send\' />";
}

add_action( \'dbx_post_sidebar\', my_button);

add_action(\'wp_ajax_my_action\', my_action_callback);

function my_action_callback() {
  global $wpdb; // this is how you get access to the database
  $api_key = $_POST[\'api_key\'];
  $user = wp_get_current_user();
  $user_id = $user->ID;
  add_user_meta($user_id, \'my_api_key\', $api_key);
  die();
}
我知道这是一大堆代码,但我就是不知道错误在哪里。

非常感谢。

3 个回复
SO网友:Milo

您的url应该指向admin ajax。php

echo admin_url(\'admin-ajax.php\');

SO网友:Jared

EDIT: 我发现你的方法有几个问题。

这就是你的案子应该做的,我继续写了一些东西。

function my_button() {
echo
"<script type = \'text/javascript\'>
    jQuery( document ).ready( function() {

        jQuery(\'input.sendajax\').click( function() {

            var sendData = {
                action: \'my_action\',
                external_id = $postID,
                title: \'$post_title\',
                content: \'$post_content\'
            };

            jQuery.post( ajaxurl, sendData, function( response ) {

                // You need to send some type of validation back
                // Like a \'success\' variable either true or false
                // Stuff sent back is accessed through the \'response\' variable, so to get the item sent back called \'success\', you would use \'response.success\'

                if( response.success == true ) {
                    window.open(response.link);
                } else {
                    console.log(response);
                }

            });

        });

    })
</script>
<input class=\'sendajax\' type=\'button\' onclick=\'ajaxRequest()\' value=\'Send\' />";
}

add_action( \'admin_head\', \'my_button\');

add_action(\'wp_ajax_my_action\', \'my_action_callback\');

function my_action_callback() {
  global $wpdb; // this is how you get access to the database
  $api_key = $_POST[\'api_key\'];
  $user = wp_get_current_user();
  $user_id = $user->ID;
  add_user_meta($user_id, \'my_api_key\', $api_key);

  $response = array( \'success\' => true, \'link\' => \'this is a response var\' ); // Stuff to send back to AJAX
  echo json_encode( $response );

  die(); // Needs this
}
如果您仔细阅读法典,并将您的代码与code here, 他们非常不同。你试图使用一种大多数人认为合适的方法,但WP已经可以为你做这些事情了(直到几天前我才意识到这一点,所以不要难过!)

我所做的是使用WP的本地ajaxurljQuery.post 要调用的方法admin-ajax.php 并发送sendData 将信息发送到将对这些变量执行某些操作的函数,然后回显response 所以你也可以这样做。

SO网友:Dale Sattler

看起来你需要把你正在做的事情分成两部分。

1/查询外部api,然后返回api密钥

2/将API密钥与用户关联。

因此,我将首先通过标准的ajax调用查询您的API,然后在第一个ajax调用的成功处理程序中,运行内部wp admin ajax调用以将用户与API键关联。

结束

相关推荐

如何在AJAX调用中声明JS变量

我正在使用:wp_localize_script( $handle, $namespace, $variables ); 在进行最初的AJAX调用之前声明一些变量,但我想我不能在回调函数中再次执行同样的操作?我需要声明一个新创建的ID以便在另一个函数中使用,最好的方法是什么?