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

从服务器PHP脚本提取股票价格JSON遇错,求解决方案

解决方案:修复JSON解析错误、CORS及404问题

1. 解决JSON解析错误(核心问题)

你的PHP脚本输出了非JSON内容(Connected successfully、股票详情文本),这些内容会和JSON字符串混在一起,导致前端无法正常解析。要彻底解决这个问题,需要确保PHP只返回纯JSON数据:

修改后的PHP代码:

<?php
/* 1. 先设置CORS和JSON响应头,必须在任何输出之前 */
header("Access-Control-Allow-Origin: https://www.dividendlook.co.uk"); // 生产环境限制为你的域名,更安全
header("Content-Type: application/json; charset=utf-8");

/* Loads the WordPress environment and template */
require( '../../wp-blog-header.php' );
global $current_user;
wp_get_current_user();

// DataTables PHP library
include( "../lib/DataTables.php" );

$json_array = array();
$stock_id = 709; // CTY.LSE

try {
    $pdo = new PDO(strtolower($sql_details['type']) . ":host=" . $sql_details['host'] . ";dbname=" . $sql_details['db'], $sql_details['user'], $sql_details['pass']);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 移除调试用的echo语句,避免输出非JSON内容
} catch(PDOException $e) {
    // 错误信息也返回JSON格式,避免前端解析失败
    echo json_encode(array("error" => "Connection failed: " . $e->getMessage()));
    exit; // 终止脚本,避免后续无效输出
}

$result = $pdo->query("SELECT id, symbol, name, price FROM dm_stocks WHERE id = $stock_id");
foreach ($result as $row) {
    // 移除所有调试用的股票详情echo
    array_push( $json_array, array('symbol'=>$row['symbol'], 'price'=>$row['price'] ) );
}

// 只输出纯JSON数据
echo json_encode($json_array);
?>

关键改动说明:

  • 把header()放在最顶部,确保在任何输出(包括空格、注释)之前发送
  • 移除所有调试用的echo语句,只保留json_encode的输出
  • 异常处理时也返回JSON格式的错误信息,避免前端解析失败

2. 彻底解决CORS问题

如果用.htaccess解决,确保规则正确(放在WordPress默认规则之前):

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "https://www.dividendlook.co.uk"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "Content-Type"
</IfModule>

注意:生产环境不要用*,限制为你的具体域名更安全。如果用PHP的header()设置,要确保没有其他输出(比如WordPress的主题/插件可能提前输出内容,这时候用.htaccess更可靠)。

3. 修复404问题

404错误通常是路径或服务器规则导致的:

  • 确认PHP文件的实际路径:直接在浏览器访问https://dividendlook.co.uk/Editor-PHP-1.9.0/controllers/ajax_stock_holdings1.php,检查是否能正常返回JSON
  • 检查WordPress的.htaccess重写规则:如果Editor-PHP目录在WordPress根目录内,可在该目录下新建.htaccess文件,添加RewriteEngine Off禁用重写,避免WordPress接管请求
  • 检查文件权限:确保PHP文件权限为644,目录权限为755,服务器能正常读取该文件

4. 适配DataTables的前端代码示例

修复后端后,前端可以直接把数据整合到DataTables中:

<script>
$(document).ready(function() {
    $.ajax({
        url: "https://dividendlook.co.uk/Editor-PHP-1.9.0/controllers/ajax_stock_holdings1.php",
        dataType: "json",
        success: function(data) {
            // 假设你的表格id为stockTable
            $('#stockTable').DataTable({
                data: data,
                columns: [
                    { data: 'symbol', title: '股票代码' },
                    { data: 'price', title: '当前价格' }
                ]
            });
        },
        error: function(xhr, status, error) {
            console.error("请求失败:", error);
            console.log("响应内容:", xhr.responseText);
        }
    });
});
</script>

用jQuery的$.ajax比原生XMLHttpRequest更简洁,也更适配DataTables的生态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:17:36