如何在Tampermonkey脚本中通过JavaScript获取PHP接口返回结果
问题分析
你的问题主要出在两个核心点上:
- 现有PHP脚本的输出逻辑完全错误,没有生成JavaScript可解析的结构化数据
- Tampermonkey环境下普通Ajax会受同源策略限制,需要用专属API处理跨域请求
第一步:修复PHP脚本
首先要把PHP的输出改成标准JSON格式,这样JavaScript才能正确解析数据。替换你的PHP代码为以下版本:
<?php $servername = "myHosting"; $username = "myUserName"; $password = "MyPassword"; $dbname = "myDbName"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { // 输出JSON格式的错误信息 die(json_encode(["error" => "Connection failed: " . $conn->connect_error])); } $sql = "SELECT id, name, description FROM tableName;"; $result = $conn->query($sql); $response = []; if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { // 将每一行数据存入响应数组 $response[] = $row; } } else { $response = ["message" => "0 results"]; } // 设置响应头为JSON类型,告诉前端如何解析 header('Content-Type: application/json'); // 输出结构化的JSON数据 echo json_encode($response); $conn->close(); ?>
第二步:编写Tampermonkey用户脚本
普通jQuery Ajax在Tampermonkey中会被浏览器的同源策略拦截,我们需要使用Tampermonkey提供的GM_xmlhttpRequest API来处理跨域请求。下面是完整的可运行脚本:
// ==UserScript== // @name Fetch PHP Data to Console // @namespace http://tampermonkey.net/ // @version 0.1 // @description Pull data from your PHP script and log to browser console // @author You // @match *://*/* // 可修改为你需要触发脚本的具体域名,比如 https://your-target-site.com/* // @grant GM_xmlhttpRequest // ==/UserScript== (function() { 'use strict'; // 发送请求到你的PHP文件 GM_xmlhttpRequest({ method: "GET", // 你的PHP脚本不需要处理POST,用GET即可 url: "https://myserver.com/file.php", onload: function(response) { try { // 将JSON字符串解析为JS对象 const data = JSON.parse(response.responseText); console.log("Fetched data from PHP:", data); } catch (e) { console.error("Failed to parse JSON response:", e); console.log("Raw response content:", response.responseText); } }, onerror: function(error) { console.error("Request failed:", error); } }); })();
关键注意事项
@grant GM_xmlhttpRequest:这一行必须保留,它是Tampermonkey允许跨域请求的关键声明,没有它请求会直接失败- 请求方法:如果后续需要用POST传递参数,只需修改
method为POST,并在PHP中处理$_POST数据即可 - 匹配规则:
@match字段可以限定脚本只在特定网站触发,避免不必要的请求
内容的提问来源于stack exchange,提问作者Marcin Frąckiewicz
相关产品推荐
相关产品推荐

