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

通过AJAX调用设备API设置温度时参数传递失败,求排查

问题原因分析与解决方案

从你的代码和描述来看,参数格式不匹配确实是导致请求失败的核心原因,具体问题出在你构造请求参数的方式上:

  • 你当前将温度值包装成了一个数组,再转成JSON字符串:
    var temp = "19";
    var arr = [temp];
    var pp = JSON.stringify(arr); // 最终结果是 "[\"19\"]"
    
  • 但Swagger中能正常运行的接口,大概率是期望接收单个数值类型的温度值,或者是一个包含温度字段的对象(比如 {"temperature": 19}),而不是数组格式的参数。后端接口接收到不符合预期的数组参数后,无法正确解析,因此返回失败。

修正方案

根据Swagger接口的定义(从截图推测是接收单个温度值),你需要调整参数的构造方式:

情况1:接口直接接收数值类型参数

如果Swagger里的setTemperature接口是直接把温度值作为请求体(比如raw JSON格式的单个数字),那么你可以直接传递数值(注意转成数字类型,避免字符串):

var temp = 19; // 用数字类型,不是字符串
api.devices.performAction(item.id, temp, act).done(function(data){
  status.nextElementSibling.innerHTML = temp + "°C";
});

同时,需要确保$.ajax的配置中,正确设置请求头的Content-Type为application/json,如果你的performAction方法里没加,需要补充:

static performAction(id, param, actionUrl) {
  return $.ajax({
    url: api.devices.url + id + actionUrl,
    method: "PUT",
    dataType: "json",
    timeout: api.timeout,
    contentType: "application/json", // 新增这行,指定请求体格式
    data: typeof param === 'object' ? JSON.stringify(param) : param
  });
}

情况2:接口接收包含温度字段的对象

如果Swagger里的接口是要求传递一个对象(比如{"temperature": 19}),那么构造参数的方式应该是:

var tempParam = { temperature: 19 };
api.devices.performAction(item.id, tempParam, act).done(function(data){
  status.nextElementSibling.innerHTML = tempParam.temperature + "°C";
});

同样要确保contentType设置正确,并且在performAction里对对象参数做JSON序列化。

验证建议

你可以打开浏览器的开发者工具(F12),查看失败请求的请求体和Swagger中成功请求的请求体做对比,就能直观看到格式差异,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:48:35