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

Shelly设备AJAX API调用持续报错求助(Postman可正常请求)

排查jQuery调用Shelly API失败的问题

根据你提供的信息和代码,Postman正常但前端AJAX报错,大概率是浏览器同源策略限制或请求配置冗余导致的,下面是具体排查步骤:

1. 移除冗余的请求头配置

你的GET请求里设置了contentType: 'application/json',但GET请求没有请求体,这个头是多余的,反而可能让Shelly服务器解析请求时出现异常。Postman默认不会添加这个头,所以能正常请求。

修改代码,删掉这一行:

var settings = {
  "url": url,
  "method": "GET",
  "timeout": 0
  // 移除 contentType 配置
};

2. 检查跨域(CORS)和混合内容问题

浏览器会限制前端页面从不同域名/协议/端口请求资源,Postman不受这个限制:

  • 如果你的前端页面是通过https协议访问的,而Shelly设备用的是默认的http,浏览器会阻止混合内容请求,此时需要把前端页面改成http访问,或者给Shelly设备配置HTTPS(家庭场景不推荐)。
  • 如果前端和Shelly设备端口/域名不同,需要确认Shelly Gen1设备是否开启了CORS支持。部分Shelly设备默认关闭CORS,你可以在设备的Web管理界面里找相关设置,或者通过Nginx做反向代理,让前端和API请求同域。

3. 完善错误日志定位具体问题

当前的fail回调只打印error信息,无法定位具体错误类型(比如403、404、CORS错误等)。修改回调函数,打印更详细的信息:

.fail(function (request, status, error) {
  console.log('请求状态:', status);
  console.log('错误信息:', error);
  console.log('服务器响应:', request.responseText);
  console.log('状态码:', request.status);
});

打开浏览器控制台查看这些信息,能快速确定是网络错误、服务器错误还是跨域错误。

4. 确认协议变量protocol的正确性

Shelly Gen1设备默认使用http协议,确保protocol变量的值是http,而不是https(除非你给设备配置了SSL证书)。

额外测试步骤

直接在浏览器地址栏输入http://192.168.68.103/status,如果能正常返回JSON,说明设备本身没问题,问题集中在前端请求配置或浏览器限制上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:01:07