WordPress插件:admin-ajax.php不向自定义函数传递数据

时间:2014-03-24 作者:Iam Zesh

在这个基本的插件框架中,我试图获得ajax发送给wordpress admin ajax的数据。要由自定义函数处理的php。

从表单发送的数据似乎没有到达我的ea\\u ajax\\u handler()函数。它似乎到达了管理ajax。php(表单数据由jQuery收集,然后我得到一个200响应,用于管理ajax.php的post请求),但看起来它没有转发给ea\\u ajax\\u handler()。

以下是我的文件:

easyA。php:

/** Enqueue scripts */
add_action(\'wp_enqueue_scripts\', \'ea_scripts\');

function ea_scripts()
{
    wp_enqueue_script(\'jquery\');
    // easyA script in the footer
    wp_register_script(\'easyA\', plugins_url(\'js/easyA.js\', __FILE__), array(\'jquery\'), \'\', true);
    wp_enqueue_script(\'easyA\'); // wondering if it\'s really needed or if the previous line is enough...
    wp_localize_script(\'easyA\', \'easyAVars\', array(\'ajaxUrl\' => admin_url(\'admin-ajax.php\')));
}

/** Shortcode to display form in pages / posts */
add_shortcode(\'easyA\',\'ea_display_form\');

function ea_display_form()
{
    echo \'
        <form id="eaForm">
            <input type="text" name="username" />
            <input type="submit" value="Submit" />
        </form>
        \';
}

/** Event handling */
add_action(\'wp_ajax_ea_ajax_handler\', \'ea_ajax_handler\');
add_action(\'wp_ajax_nopriv_ea_ajax_handler\', \'ea_ajax_handler\');

function ea_ajax_handler() 
{
    $json = array(
        \'success\' => false,
        \'result\'  => 0
    );

    if (isset($_POST[\'username\'])) {
        $result = \'Hi, \' . $_POST[\'username\'] . \'!\';

        $json[\'success\'] = true;
        $json[\'result\'] = $result;
    }

    echo json_encode($json);
    wp_die();
}
easyA。js公司:

jQuery(document).ready(function($) {
    $(\'#eaForm\').on(\'submit\', function() {
        var that = $(this),
            contents = that.serialize();

        console.log(\'contents: \' + contents); // debugging
        jQuery.ajax({
            url: easyAVars.ajaxUrl,
            dataType: \'json\',
            type: \'post\',
            data: contents,
            action: \'ea_ajax_handler\', // function in easyA.php that will be triggered
            success: function(data) {
                console.log(data);
            }
        });

        return false;
    });
});

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

正如Czersplace提到的,您需要将操作传递给.ajax().

一种方法是修改表单:

function ea_display_form()
{
    echo \'
        <form id="eaForm">
            <input type="text" name="username" />
            <input type="submit" value="Submit" />
            <input type="hidden" name="action" value="ea_ajax_handler" />
        </form>
        \';
}

结束

相关推荐

Wordpress & Ajax

我正在创建一个插件,我想实现拖放;删除将li的顺序保存在列表中的功能,然后将该列表显示在网站前端。我可能有点不知所措,因为我对ajax知之甚少。有没有一些基本的和简单的教程可以解释类似的内容?