You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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头并终止脚本,用法如下:
    if (isset($_POST["newFormRecherche"])) { 
        wp_send_json(['status' => 'success', 'message' => 'hey']);
    }else{ 
        wp_send_json(['status' => 'error', 'message' => 'heye']);
    }
    
    前端可以直接处理这个JSON对象:
    .done(function(data) { 
        window.alert(data.message); 
    })
    
  • 关于admin-ajax.php的路径,尽量不要硬编码绝对路径,建议在PHP中通过admin_url('admin-ajax.php')生成正确路径,然后传递给JS,比如在页面中添加:
    <script>
    const ajaxUrl = "<?php echo admin_url('admin-ajax.php'); ?>";
    </script>
    
    这样JS里就可以直接用ajaxUrl作为请求地址,避免路径错误。

内容的提问来源于stack exchange,提问作者HAYATO SHIBA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:39:27