在WordPress中运行AJAX时出现问题

时间:2012-02-13 作者:Danny

FIXED

我更改了以下内容:

wp_enqueue_script( \'pfxconversion\', plugin_dir_url( __FILE__ ) . \'function.js\', array( \'jquery\' ) );
    wp_localize_script( \'pfxconversion\', \'MyAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );

    add_action( \'wp_ajax_nopriv_pfxconversion\', \'pfxconversion_callback\' );
    add_action( \'wp_ajax_pfxconversion\', \'pfxconversion_callback\' );
对此:

add_action (\'wp_print_scripts\', \'widget_logic_js_fx\', 1);

function widget_logic_js_fx() {
    wp_enqueue_script( \'purefx-currency-converter\', plugin_dir_url( __FILE__ ) . \'function.js\', array( \'jquery\' ) );
    wp_localize_script( \'purefx-currency-converter\', \'MyAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
}

add_action( \'wp_ajax_nopriv_pfxconversion\', \'pfxconversion\' );
add_action( \'wp_ajax_pfxconversion\', \'pfxconversion\' );
wp\\u print\\u脚本是我们缺少的:-)

1 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

1: codex建议在wp\\u enqueue\\u scripts()钩子上嵌入所有脚本和样式。这并不能解决问题,但却是一种良好的做法。

2: 我认为进入php函数的所有数据都封装在$\\u POST中。由发送。ajax调用。因此,看起来除了操作名称之外,您没有发送任何数据,也没有正确解码PHP文件中的数据。

我会开始改变:

function pfxconversion () {
  echo "bacon"; exit();
}
只是为了确保您正在与ajax功能对话。不过,这一部分在我看来是正确的。

正在发送什么类型的信息?一些表单数据?您需要将其序列化并将其包含在ajax调用中。

jQuery(文档)。就绪(函数(){

jQuery("#convert").click(function () {

     jQuery.ajax({
       type: "POST",
       url: MyAjax.ajaxurl,
       data: action=\'pfxconversion&bacon=hellyes\',
       success: function(data){

       jQuery(\'#results\').show();
       //Put received response into result div
       jQuery(\'#results\').html(data);
       }
     });
});
然后在php端,我们可以获得如下post数据:

function pfxconversion () {
      $data = $_POST;
      echo $data[\'bacon\'];
      exit();
    }
理论上,这应该呼应我们之前设定的“是的”。

您可能正在发送一个表单,在这种情况下,您将附加$(“#formID”)。像这样序列化()

var formdata = $(\'#formID\').serialize();
那么ajax调用中的数据行如下所示:

data: formdata + \'action=pfxconversion\',
由于您没有发布您试图发送的信息类型(HTML),我没有继续这样做,但希望您能从我的示例中得到要点。

编辑:

所以我看了一下管理ajax。php,您可以看到两件事。首先,如果用户未登录,它将尝试运行

do\\u action(\'wp\\u ajax\\u nopriv\\u.$\\u请求[\'action]);

如果您登录,则不会触发此操作。。。。我在我的本地安装上测试它。

因此,为了确保这对登录和注销的用户都有效,我们需要将该操作添加到wp\\u ajax\\u和wp\\u ajax\\u nopriv_

其次,零响应意味着它管理ajax。php检查了自己的所有切换案例,没有找到任何操作。

default :
    do_action( \'wp_ajax_\' . $_GET[\'action\'] );
    die(\'0\');
    break;
endswitch;
这就是代码的结尾。。。。对我们来说,这意味着它找不到动作名称。

因此,我做了一些调整,现在得到了回应:

jQuery(document).ready(function() {     
    $("#convert").click(function () { 

            var formdata = $(\'#conversionform\').serialize();

        $.ajax({
            type: "POST",
            url: MyAjax.ajaxurl,
            data: \'action=pfxconversion&\' + formdata,
            type: \'POST\',
            cache: false,
            success: function (resp) { 
                console.log(resp);
            },
            error: function (err) {
                console.log(err);
            }
        });
        return false;
    });     
});
在php方面:

add_action( \'wp_ajax_nopriv_pfxconversion\', \'pfxconversion_callback\' );
add_action( \'wp_ajax_pfxconversion\', \'pfxconversion_callback\' );

function pfxconversion_callback () {
    print_r($_POST);
    exit();
}
应该显示控制台中表单中的值数组。。。这意味着您现在正通过ajax成功地与回调函数进行对话。

ps-您可以在表单中添加带有操作的隐藏输入。

<input type="hidden" name="action" value="pfxconversion" />
然后它将由serialize()自动拉入,您不需要在中连接字符串。ajax调用

//编辑

function add_my_scripts(){
wp_enqueue_script( \'pfxconversion\', plugin_dir_url( __FILE__ ) . \'function.js\', array( \'jquery\' ) );
wp_localize_script( \'pfxconversion\', \'MyAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
}
add_action(\'wp_enqueue_scripts\',\'add_my_scripts\');

结束

相关推荐

AJAX将数据保存到文档上的数据库准备就绪,未保存任何数据

我写了一个插件,可以收集文档就绪状态的统计信息。请记住,我的数据库表已经创建。我添加了以下代码来执行ajax代码add_action( \'wp_head\', \'zkr_stats_ajax\' ); function zkr_stats_ajax(){ ?> <script type=\'text/javascript\' > jQuery(document).ready(function() {