WordPress Ajax请求成功但返回数据为空,为何未输出echo内容?
问题分析与解决方案
你的问题核心很明确:echo 'echo';这行代码永远不会被执行,所以前端收到的data是空的,原因出在PHP函数的执行逻辑上。
为什么代码没走到echo?
看一下你的mon_action函数逻辑:
function mon_action() { if (isset($_POST["newFormRecherche"])) { $field1='hey'; exit(); // 脚本在这里直接终止 }else{ $field1='heye'; exit(); // 脚本也在这里直接终止 } echo 'echo'; // 永远到不了这一行! die(); }
不管$_POST["newFormRecherche"]是否存在,脚本都会在if或else分支里调用exit()直接终止,后面的echo和die()根本没有执行的机会,自然不会输出任何内容。
修正后的代码示例
你需要把输出逻辑放到分支里,并且推荐使用WordPress官方推荐的wp_die()来终止脚本(替代exit()/die(),确保符合WP的响应规范):
add_action( 'wp_ajax_mon_action', 'mon_action' ); add_action( 'wp_ajax_nopriv_mon_action', 'mon_action' ); function mon_action() { if (isset($_POST["newFormRecherche"])) { echo 'hey'; // 直接输出你要返回的内容 }else{ echo 'heye'; } wp_die(); // WordPress推荐的脚本终止方式 }
额外优化建议
- 如果需要返回JSON格式的数据(比如复杂的响应内容),可以用WordPress提供的
wp_send_json()函数,它会自动设置正确的HTTP头并终止脚本,用法如下:
前端可以直接处理这个JSON对象:if (isset($_POST["newFormRecherche"])) { wp_send_json(['status' => 'success', 'message' => 'hey']); }else{ wp_send_json(['status' => 'error', 'message' => 'heye']); }.done(function(data) { window.alert(data.message); }) - 关于
admin-ajax.php的路径,尽量不要硬编码绝对路径,建议在PHP中通过admin_url('admin-ajax.php')生成正确路径,然后传递给JS,比如在页面中添加:
这样JS里就可以直接用<script> const ajaxUrl = "<?php echo admin_url('admin-ajax.php'); ?>"; </script>ajaxUrl作为请求地址,避免路径错误。
内容的提问来源于stack exchange,提问作者HAYATO SHIBA
相关产品推荐
相关产品推荐

