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

WordPress插件API调用返回HTML而非数据,求排查解决

问题诊断与解决方案

核心问题分析

你遇到的API返回HTML而非预期token的问题,主要源于以下几点:

  • 直接使用独立PHP脚本your_php_script.php调用WordPress函数wp_remote_post,但该脚本未加载WordPress核心环境,导致函数无法正常执行,反而返回服务器默认的HTML错误页面(比如404或带页面结构的空白内容)。
  • 即使脚本能调用函数,也未正确输出纯token数据,可能附带了WordPress的页面模板内容。
  • AJAX请求的dataType设置为text,未针对JSON输出做适配,同时缺少精准的错误处理逻辑。

修复步骤

1. 改用WordPress官方AJAX机制

在WordPress插件中,必须通过内置的AJAX钩子处理请求,避免直接调用独立PHP文件。

步骤1:注册AJAX动作钩子

在你的插件PHP文件中添加以下代码,注册前台、后台通用的AJAX处理动作:

// 注册AJAX获取token的动作(前台用户访问用nopriv前缀,后台用wp_ajax前缀)
add_action('wp_ajax_get_order_token', 'handle_get_order_token');
add_action('wp_ajax_nopriv_get_order_token', 'handle_get_order_token');

function handle_get_order_token() {
    // 调用已有的token获取函数
    $token = get_api_token();
    
    // 输出标准JSON格式响应
    if ($token) {
        wp_send_json_success(['token' => $token]);
    } else {
        wp_send_json_error(['message' => '无法获取API Token']);
    }
    
    // 强制终止输出,防止WordPress继续输出页面内容
    wp_die();
}

// 保留你原有的get_api_token函数
function get_api_token()
{
    $api_url = "http://37.156.28.62:8091/token";
    $username = "jbplugin";
    $password = "******";

    $response = wp_remote_post($api_url, [
        "headers" => [
            "Content-Type" => "application/json",
        ],
        "body" => json_encode([
            "username" => $username,
            "password" => $password,
        ]),
    ]);

    if (!is_wp_error($response) && $response["response"]["code"] == 200) {
        $data = json_decode($response["body"], true);
        if (isset($data["token"])) {
            return $data["token"];
        }
    }

    return false;
}

步骤2:修改jQuery AJAX代码

更新前端脚本,适配WordPress AJAX机制并处理JSON响应:

jQuery("#submitOrder").click(function(e) {
    // 阻止按钮默认提交行为(如果是表单内按钮)
    e.preventDefault();
    
    jQuery.ajax({
        url: "<?php echo admin_url('admin-ajax.php'); ?>",
        type: "POST",
        dataType: "json",
        data: {
            action: 'get_order_token' // 对应PHP中注册的AJAX动作名
        },
        success: function(response) {
            if (response.success) {
                console.log("Token: " + response.data.token);
                // 这里可添加后续使用token的业务逻辑,比如提交订单
            } else {
                console.error("获取Token失败: " + response.data.message);
            }
        },
        error: function(xhr, status, error) {
            console.error("AJAX请求错误: " + error);
            // 可查看xhr.responseText获取返回的HTML内容,排查具体错误原因
            console.log("错误详情HTML: ", xhr.responseText);
        }
    });
});

2. 额外注意事项

  • 如果前端脚本是独立JS文件,需要先将ajaxurl传递给JS:
    在插件PHP文件中添加:
    wp_localize_script('你的插件脚本句柄', 'wpAjax', [
        'ajaxUrl' => admin_url('admin-ajax.php')
    ]);
    
    然后在JS文件中用wpAjax.ajaxUrl作为请求URL。
  • 先在PHP中直接调用get_api_token()测试,确认第三方API能正常返回token,排除API本身的问题。
  • 检查服务器是否允许对外发起HTTP请求(部分主机禁用wp_remote_post,可通过wp_remote_get测试外部请求连通性)。

内容的提问来源于stack exchange,提问作者Mohammad Amin Najafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:20:23