当JavaScript位于单独的文件中时,使用AJAX和随机数

时间:2015-10-28 作者:karl

我对nonce如何处理ajax请求有点困惑。看起来我应该用这个:https://codex.wordpress.org/Function_Reference/check_ajax_referer

请求如下所示:

<?php
//Set Your Nonce
$ajax_nonce = wp_create_nonce( "my-special-string" );
?>

<script type="text/javascript">
jQuery(document).ready(function($){
    var data = {
        action: \'my_action\',
        security: \'<?php echo $ajax_nonce; ?>\',
        my_string: \'Hello World!\'
    };
    $.post(ajaxurl, data, function(response) {
        alert("Response: " + response);
    });
});
</script>
但这种方法似乎假设JavaScript与PHP混合在一起,我喜欢避免这种做法。当我为插件编写ajax请求时,我使用admin_url( \'admin-ajax.php\') 将请求分离出来,以便更清晰地阅读。

在这种情况下,我如何使用nonce?我是否在admin_url( \'admin-ajax.php\') 一点

1 个回复
SO网友:Howdy_McGee

您可以本地化脚本,并将nonce和ajax url传递给脚本
Learn more about script localization.

function wpse_206839() {

    // Register our script just like we would enqueue it - for WordPress references
    wp_register_script( \'my-special-script\', \'directory/my-special-script.js\', array( \'jquery\' ), false, true );

    // Create any data in PHP that we may need to use in our JS file
    $local_arr = array(
        \'ajaxurl\'   => admin_url( \'admin-ajax.php\' ),
        \'security\'  => wp_create_nonce( \'my-special-string\' )
    );

    // Assign that data to our script as an JS object
    wp_localize_script( \'my-special-script\', \'specialObj\', $local_arr );

    // Enqueue our script
    wp_enqueue_script( \'my-special-script\' );

}
add_action( \'wp_enqueue_scripts\', \'wpse_206839\' );
这将允许我们访问JS中的nonce asconsole.log( specialObj.security );

相关推荐

无法使用AJAX访问数据库中的数据

我正试图在wordpress中首次调用AJAX。我遵循了一些教程,到目前为止已经达到了这一点。但当我试图安慰的时候。将从数据库中获取的数据记录在AJAX调用中,我发现以下错误:未捕获引用错误:未定义数据代码:功能。phpfunction my_ajax_handler(){ global $wpdb; $name = $wpdb->get_results(\"SELECT * FROM username\"); echo $name;