【问题标题】:Wordpress AJAX in plugin response 0插件响应中的 Wordpress AJAX 0
【发布时间】:2015-05-12 18:41:03
【问题描述】:

我为 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);
    });
});

【问题讨论】:

    标签: javascript php jquery ajax wordpress


    【解决方案1】:

    你确定吗

     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;
    }
    

    【讨论】:

      【解决方案2】:
       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;
          });
      });
      

      【讨论】:

        【解决方案3】:

        尝试更换

        die;
        

        exit;
        

        0 错误是 ajax 的 wordpress 中的默认错误,大多数时候它是死的;会破坏一切。希望这会有所帮助

        【讨论】:

        • 我用 exit; 替换 die; 但仍然得到响应 0
        猜你喜欢
        • 1970-01-01
        • 2017-01-13
        • 1970-01-01
        • 1970-01-01
        • 2015-09-06
        • 2014-12-17
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        相关资源
        最近更新 更多