向服务器URL发送JSON文件无报错,但目标URL内容为空的问题
嘿,我明白你的困扰——代码跑起来没报错,但访问那个JSON文件时还是空的,这确实让人摸不着头脑。咱们一步步拆解问题,找到解决方案:
核心问题:静态文件服务器不支持写入操作
你当前请求的URL是一个静态JSON文件(https://netfish.xyz/wp-content/uploads/2018/05/archivo.json),但普通的静态文件托管服务(比如WordPress用来存上传文件的服务器)只负责读取文件并返回内容,根本没有处理POST请求来修改文件的逻辑。你发过去的JSON数据服务器根本没地方存,自然文件内容还是空的。
具体排查&修复步骤
1. 给后端加个处理写入的接口
要实现把数据写入JSON文件,你需要一个后端脚本(比如PHP,毕竟WordPress本身用PHP)来接收POST过来的JSON,然后把它写到目标文件里。给你写个简单的PHP示例:
<?php // 允许跨域(如果你的前端和后端不在同一域名下) header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json"); // 读取POST过来的JSON数据 $json_data = file_get_contents('php://input'); if (!$json_data) { echo json_encode(['status' => 'error', 'message' => '没接收到任何数据']); exit; } // 目标文件的服务器路径(根据你的实际路径调整) $file_path = $_SERVER['DOCUMENT_ROOT'] . '/wp-content/uploads/2018/05/archivo.json'; // 写入文件 if (file_put_contents($file_path, $json_data)) { echo json_encode(['status' => 'success', 'message' => '数据写入成功']); } else { echo json_encode(['status' => 'error', 'message' => '写入文件失败,检查权限']); } ?>
把这个文件存到你的WordPress服务器上(比如命名为write-json.php),然后把前端代码里的请求URL换成这个PHP文件的地址。
2. 完善前端代码的容错逻辑
你的前端代码现在只处理了请求成功的情况,万一服务器报错或者params本身是空的,你根本看不到问题。调整一下:
// 先确认params有实际内容 if (!params || Object.keys(params).length === 0) { console.error('哎呀,params是空的或者没定义!'); return; } $('#form-output code').html(JSON.stringify(params, undefined, 4)); var xhr = new XMLHttpRequest(); // 替换成你的后端接口URL var url = "https://netfish.xyz/write-json.php"; xhr.open("POST", url, true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { var json = JSON.parse(xhr.responseText); console.log('服务器响应:', json); if (json.status === 'success') { console.log('数据保存成功啦!'); } else { console.error('服务器出错:', json.message); } } else { console.error('请求失败,状态码:', xhr.status); } } }; var data = JSON.stringify(params, undefined, 4); console.log('要发送的数据:', data); xhr.send(data);
3. 检查服务器文件权限
别忘了确认archivo.json文件和它所在的目录有服务器用户的写入权限(通常是www-data或者apache用户),不然后端脚本就算逻辑对了,也写不了文件。
额外提醒
如果是在WordPress环境下,更规范的做法是写一个自定义REST API端点,而不是直接用PHP操作文件,这样更安全,也符合WordPress的开发规范。另外,直接暴露写入接口有安全风险,最好加个身份验证(比如API密钥或者用户登录校验),防止别人乱改你的文件。
内容的提问来源于stack exchange,提问作者Jon Velasco

