Wordpress插件中的AJAX响应0
Wordpress插件中的AJAX响应0
我为WordPress创建了一个插件,并在插件中使用了AJAX,但是AJAX的响应为0。我尝试按照这个答案来解决这个问题,但是无法解决我的问题。
这是我的处理函数:
如果是管理员:
如果是管理员,就添加一个名为"language_redirect_add_config_page"的"admin_menu"的动作。
否则:
- 添加一个名为"preference_language"的"plugins_loaded"的动作
- 添加一个名为"enqueue"的"wp_enqueue_scripts"的动作
- 添加一个名为"preference_language"的"wp_ajax_preference_language"的动作
- 添加一个名为"preference_language"的"wp_ajax_nopriv_preference_language"的动作
添加选项页面的函数为:
添加一个名为"language_redirect_config_page"的选项页面,页面标题为"Language Redirect Setting",菜单标题为"Language Redirect",权限为"manage_options",文件名为当前文件名。
添加脚本的函数为:
添加一个名为"ajax-script"的脚本,脚本路径为"/js/plugin-script.js",依赖于"jquery"。
将"ajax-script"脚本本地化,并将"ajax_url"设为"admin-ajax.php"的URL。
处理函数为:
获取POST的"language"值,如果是"th",就将页面重定向到"th"的URL,否则返回。
结束函数。
这是我的AJAX脚本:
在文档准备就绪时,获取存储在本地的"language"值。
创建一个包含"action"和"language"的数据对象。
使用POST发送数据到"ajax_object.ajax_url",并在响应中打印。
Wordpress AJAX在插件响应中出现问题的原因是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; }
解决方法是对localStorage.getItem('language')进行检查,确保它的值是正确的。
Wordpress插件响应0的AJAX问题是因为在输出已经开始之后设置了头部信息。AJAX是从前端调用的,显然输出已经开始了。
解决方法是通过修改代码来避免在输出开始后设置头部信息。可以使用以下代码(未经测试)来实现:
function preference_language() { $language = $_POST['language']; if($language == 'th') { echo site_url('th'); } else { return; } exit; }
在JavaScript代码中,可以使用以下方式来调用上述函数:
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; } ); });
以上就是解决Wordpress插件响应0的AJAX问题的方法。通过修改代码,避免在输出开始后设置头部信息,可以确保代码正常运行。