0

我的functions.php文件中有以下代码。

wp_enqueue_script( 'broadcast-ajax-request', get_template_directory_uri() . '/js/global.js', array( 'jquery' ) );
wp_localize_script( 'broadcast-ajax-request', 'ajaxadmin', array('ajaxurl'=> admin_url( 'admin-ajax.php' )));

add_action( 'wp_ajax_get_my_option', 'get_my_option' );
add_action( 'wp_ajax_nopriv_get_my_option', 'get_my_option' );

function get_my_option()
{
    print_r($_POST); exit;
}

和下面的代码global.js

jQuery('document').ready(function(){
  jQuery("#submit_btn").click(function(){
    jQuery.ajax({
        url: ajaxadmin.ajaxurl,
        data: {'action':'get_my_option', 'test':'test'},
        type: "POST",
        success: function(response){
        }
    });
  });
});

但它总是返回html代码作为响应。

4

2 回答 2

0

这绝对是一个迟到的回复,但希望它可以帮助某人。

当您本地化 Wordpress admin ajax url 时,您正在设置一个由 Wordpress 插入到您的页面中的变量,如下所示:

/* <![CDATA[ */
var bookingajax = {"ajax_url":"http:\/\/localhost:8888\/wp-admin\/admin-ajax.php"};
/* ]]> */

当使用 admin-ajax.php 作为插件的后端时,adminajax 变量设置如下:

var ajaxurl = '/gss/wp-admin/admin-ajax.php',

检查 ajax url 是否已本地化的最佳方法是将您设置的变量打印到控制台。

在我的示例中,我使用 bookingajax 设置本地化我的 admin-ajax.php。

如果你用 console.log(bookingajax) 打印这个变量,你会看到它现在存储在一个 javascript 对象中。

这是解决方案!

在上面的示例中,您仍在使用 adminajax 变量。您将需要添加在存储在前端的变量中设置的下划线。

var ajaxurl = bookingajax.ajax_url;

jQuery.ajax({
        url: ajaxurl,
        data: {'action':'get_my_option', 'test':'test'},
        type: "POST",
        success: function(response){
        }
    });
于 2017-07-21T02:12:16.537 回答
0

脚本入队和本地化需要在wp_enqueue_scripts动作挂钩中进行:

function so_34632421_enqueue_scripts() {
    wp_enqueue_script( 'broadcast-ajax-request', get_template_directory_uri() . '/js/global.js', array( 'jquery' ) );
    wp_localize_script( 'broadcast-ajax-request', 'ajaxadmin', array('ajaxurl'=> admin_url( 'admin-ajax.php' )));
}
add_action('wp_enqueue_scripts', 'so_34632421_enqueue_scripts');

在 Codex 中阅读更多内容。

于 2016-01-06T12:15:09.237 回答