
WordPress 中 AJAX 请求返回 {"success":true,"data":"0"},通常是因为 PHP 回调函数未按 WordPress JSON 规范返回数据,而是错误地混用 echo 与 wp_send_json_success(),导致输出被截断或格式异常。
wordpress 中 ajax 请求返回 {"success":true,"data":"0"},通常是因为 php 回调函数未按 wordpress json 规范返回数据,而是错误地混用 echo 与 wp_send_json_success(),导致输出被截断或格式异常。
在 WordPress 插件或主题中使用 AJAX 时,必须严格遵循其 AJAX 处理机制:所有响应必须通过 wp_send_json_success() 或 wp_send_json_error() 统一输出 JSON 格式数据,且不能有任何额外的 echo、print、var_dump() 或 HTML 输出(包括空格和换行)。否则,WordPress 会因输出冲突而默认返回 "0"(尤其在 nopriv 场景下更易触发)。
你当前代码的问题在于:
function update_modification_dropdown_options()
{
echo "<option value="test">Test</option>"; // ❌ 错误:直接 echo 破坏了 JSON 响应结构
$output = ob_get_clean(); // ❌ 无效:ob_get_clean() 此处无意义,且未被使用
wp_send_json_success($output); // ❌ $output 为空字符串 → data: "0"
wp_die();
}
wp_send_json_success() 接收一个参数(推荐为关联数组),自动设置 Content-Type: application/json,序列化并输出完整 JSON,最后调用 wp_die() 终止执行。若传入空值、字符串或非预期类型,可能退化为 data: "0"。
✅ 正确写法如下:
将 LaTeX(.tex)学术论文转换为 Word(.docx),支持可编辑的 OMML 公式、原生 Word 表格、嵌入图形、IEEE 双栏排版及参考文献
function update_modification_dropdown_options()
{
// 构建要返回的 HTML 片段(或结构化数据)
$options_html = '<option value="test">Test</option>';
// 推荐:返回结构化数组,便于前端灵活处理
$response = [
'html' => $options_html,
'timestamp' => current_time('mysql'),
];
wp_send_json_success($response);
wp_die(); // 必须保留,防止后续代码执行
}
对应前端 JavaScript 需同步调整,解析 JSON 响应体中的具体字段:
$('#data-modification-table tbody').on('change', 'td select', function(e) {
e.preventDefault();
let $tr = $(e.target).closest('tr');
$.ajax({
type: "POST",
url: ajaxurl,
dataType: "json",
data: {
action: "send_dropdown_account_data", // ⚠️ 注意:此处 action 名需与 add_action 中一致
account_id: $tr.find('.user_account_name').val(),
project_id: $tr.find('.user_project_name').val(),
},
success: function(response) {
if (response.success) {
// ✅ 正确访问返回的 HTML
console.log('Dropdown options:', response.data.html);
// 示例:注入到某个 <select> 中
$('#target-select').html(response.data.html);
}
},
error: function(xhr, status, error) {
console.error('AJAX Error:', status, error);
}
});
});</select>
⚠️ 关键注意事项:
-
Action 名称一致性:PHP 中
add_action('wp_ajax_send_dropdown_account_data', ...)的 action 名(send_dropdown_account_data)必须与 JSdata.action完全一致(你原代码中 PHP 注册的是send_dropdown_account_dat,存在拼写差异,务必修正); -
权限钩子完整:若需支持未登录用户,请确保同时挂载
wp_ajax_nopriv_钩子(你已添加,但 action 名也需同步修正); -
禁止任何额外输出:函数内不得有
echo、var_dump()、error_log()(除非调试后移除)、HTML 标签或空白字符; -
必须调用
wp_die():这是 WordPress AJAX 的强制要求,避免输出重复内容或 0。
总结:WordPress AJAX 不是普通 PHP 脚本,它是一套受控的 JSON 响应协议。始终用 wp_send_json_success( $data ) 返回结构化数组,并在前端通过 response.data.xxx 访问,即可彻底解决 “返回 0” 和 [object Object] 解析失败问题。










