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