WP AJAX不工作,始终返回0

时间:2015-06-14 作者:Boris Lapouga

我在这里检查了所有与此相关的线程,并进行了调试测试。我想了解为什么我自己的代码不起作用,因为它提供了与此问题相关的所有可能创建的线程中解释的相同功能。

我试图在单击复选框时发送AJAX请求,并使用MySQL进行一些工作。

以下是一些详细信息,以了解范围和所做的工作:

var $ = jQuery;
$(function() {
    $(\'table.table\').on(\'click\', \'[name="term-id"]\', function() {
        var t = $(this),
            id = t.val(),
            checked = t.is(\':checked\');

        checkCategory(id, checked);
    });
});

function checkCategory(id, checked) {
    $.ajax({
        url: ajaxurl,
        type: \'POST\',
        dataType: \'json\',
        data: {action: \'setAsyncCheckProduct\', id: id, checked: checked},
        success: function(response) {
            alert(response);
        },
        error: function(errorThrown) {
            alert(errorThrown);
        }
    })
}
此脚本通过以下方式包含在我的插件中:

wp_enqueue_script(\'settings-manager\', $this->pluginUrl . \'/assets/js/SettingsManager.js\');
在我的主(抽象)插件类中(它被实例化并被调用,因此我省略了这个代码示例),但我添加了分配给admin\\u init的异步事件:

add_action(\'admin_init\', [$this, \'assignAsyncEvents\']);
在我的具体类中,我实现了如下方法:

public function setAsyncCheckProduct()
{
    var_dump($_REQUEST);
    echo 123123123;
    wp_die();
}

public function assignAsyncEvents()
{
    add_action(\'wp_ajax_setAsyncCheckProduct\', [$this, \'setAsyncCheckProduct\']);
}
这基本上意味着:

向“ajaxurl”发送AJAX请求(返回正确的:/wp admin/admin AJAX.php),操作:setAsyncCheckProduct随服务器一起发送,在服务器上,assignAsyncEvents应该已经完成,并分配了一个wp\\u AJAX\\u MY\\u action\\u名称。

为什么我仍然得到0的响应?

谢谢

UPDATE我一直在手动将调试输出放入admin ajax中。php只是出于好奇。

if ( is_user_logged_in() ) {
    /**
     * Fires authenticated AJAX actions for logged-in users.
     *
     * The dynamic portion of the hook name, `$_REQUEST[\'action\']`,
     * refers to the name of the AJAX action callback being fired.
     *
     * @since 2.1.0
     */
    do_action( \'wp_ajax_\' . $_REQUEST[\'action\'] );
    var_dump(\'wp_ajax_\' . $_REQUEST[\'action\']);
} else {
    /**
     * Fires non-authenticated AJAX actions for logged-out users.
     *
     * The dynamic portion of the hook name, `$_REQUEST[\'action\']`,
     * refers to the name of the AJAX action callback being fired.
     *
     * @since 2.8.0
     */
    do_action( \'wp_ajax_nopriv_\' . $_REQUEST[\'action\'] );
}
// Default status
die( \'0\' );
这是添加了我的var\\u dump的核心功能。我的AJAX调用到达那里,输出是插件文件中add\\u ACTION中定义的正确操作名称,虽然我的操作没有返回任何内容/没有调用它,但我得到了默认值die( \'0\' );

真倒霉不知道下一步该怎么办。

2 个回复
SO网友:Margareto

问题是您将wp\\u ajax的add\\u操作放在哪里_*

试着把它放在所有事情的开头,并确保它正在加载到a/wp admin/route中。

尝试您的url:http://xxx/wp-admin/admin-ajax.php?action=your_action 直到它给你一些不同于零的东西。

SO网友:Y. E.

为那些试图解决相同问题的人提供此答案。

重要的是

add_action(\'wp_ajax_setAsyncCheckProduct\', [$this, \'setAsyncCheckProduct\']);

驻留。

在我的例子中,问题最终得到了解决,将类似的行移到主插件文件中,其中包含并初始化了所有具体的类。当然,该行必须更改为以下形式:

add_action(\'wp_ajax_setAsyncCheckProduct\', [\'ClassName\', \'setAsyncCheckProduct\']);

结束