插件响应中的Wordpress AJAX 0

时间:2015-03-11 04:47:38

标签: javascript php jquery ajax wordpress

我为Wordpress创建插件并在插件中使用AJAX,但AJAX响应为0.我尝试按照answer解决此问题,但无法解决我的问题。

这是我的处理函数

if( is_admin())  {
    add_action( 'admin_menu', 'language_redirect_add_config_page' );
}
else {
    add_action( 'plugins_loaded', 'preference_language' );
    add_action( 'wp_enqueue_scripts', 'enqueue' );
    add_action( 'wp_ajax_preference_language', 'preference_language' );
    add_action( 'wp_ajax_nopriv_preference_language', 'preference_language' );
}

function language_redirect_config_page() {
    add_options_page( __( 'Language Redirect Setting' ), __( 'Language Redirect' ), 'manage_options', basename( __FILE__ ), '' );
}

function enqueue() {
    wp_enqueue_script( 'ajax-script', plugins_url( '/js/plugin-script.js', __FILE__ ), array('jquery') );
    wp_localize_script( 'ajax-script', 'ajax_object', array( 
        'ajax_url' => admin_url( 'admin-ajax.php' )
        ) 
    );
}

// Handler function...
function preference_language() {
    $language = $_POST['language'];
    if($language == 'th') {
        header( 'Location: ' . site_url('th') );
    }
    else {
        return;
    }
    die;
}

这是我的AJAX脚本

jQuery(document).ready(function($) {
    var language = localStorage.getItem('language');
    var data = {
        action: 'preference_language',
        language: language
    };
    $.post(
        ajax_object.ajax_url, 
        data, 
        function(response) {
            console.log(response);
    });
});

3 个答案:

答案 0 :(得分:1)

尝试更换

die;

exit;

0错误是ajax在wordpress中的默认错误,大部分时间都是死的;会破坏一切。希望这有帮助

答案 1 :(得分:0)

 header( 'Location: ' . site_url('th') );

在渲染输出后,您无法设置标题。记住从前端调用ajax,显然输出已经开始了。

这是一种做到这一点的方式(未经测试):

function preference_language() {
      $language = $_POST['language'];
      if($language == 'th') {
        echo site_url('th');
      } else {
        return;
      }
   exit;
}

JS

jQuery(document).ready(function($) {
    var language = localStorage.getItem('language');
    var data = {
        action: 'preference_language',
        language: language
    };
    $.post(
        ajax_object.ajax_url, 
        data, 
        function(response) {
            window.location = response;
    });
});

答案 2 :(得分:0)

你确定吗

 localStorage.getItem('language')

实际上拥有一个或者可能是'th'的值?

为确保您的代码有效,您可以使用以下代码而不是当前的preference_language():

function preference_language() {
    $language = $_POST['language'];
    if($language == 'th') {
        echo "language is th.";
    }
    else {
        echo "language is not th.";
    }
    die;
}