jQuery调用NWS点位GET请求返回400错误问题咨询
问题原因
你代码中设置了cache: false,jQuery会自动给GET请求URL末尾追加时间戳查询参数_=[毫秒级时间戳]用来强制跳过浏览器缓存,但NWS的api.weather.gov接口不允许传入未定义的查询参数,因此直接返回400错误。你直接在浏览器地址栏访问URL时没有这个额外参数,所以可以正常拿到返回结果。
解决方法
方案1:移除cache配置(最简单)
jQuery AJAX默认对JSON类型的请求开启缓存,不需要额外配置cache: false,直接删除该配置项即可解决参数追加问题,修改后的代码如下:
$.ajax({ url: "https://api.weather.gov/points/39.5,-105.5", dataType: "json", // 可选:添加User-Agent标识请求来源,符合NWS接口要求避免被拦截 headers: { "User-Agent": "你的应用名称/版本" } }) .done(function(res) { // 注意:返回结果是JSON对象,不能直接插入DOM,可先序列化或按需取字段 $( "#results" ).append( JSON.stringify(res, null, 2) ); });
方案2:需要禁用缓存的场景
如果你确实需要避免浏览器读取旧缓存,不要使用cache: false参数,改为在请求头中添加缓存控制字段,不会额外追加查询参数:
$.ajax({ url: "https://api.weather.gov/points/39.5,-105.5", dataType: "json", headers: { "User-Agent": "你的应用名称/版本", "Cache-Control": "no-cache, no-store, must-revalidate", "Pragma": "no-cache" } }) .done(function(res) { $( "#results" ).append( JSON.stringify(res, null, 2) ); });
内容的提问来源于stack exchange,提问作者Rick R.
相关产品推荐
相关产品推荐

