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

XMLHttpRequest无响应求助:调用天气API获取天气信息失败

排查XMLHttpRequest无法获取OpenWeatherMap响应的问题

嘿,我来帮你捋捋这个问题!从你描述的情况和给出的代码片段来看,虽然测试URL是可用的,但收不到XHR响应大概率是几个常见的小问题导致的,咱们一步步排查:

1. 最可能的原因:URL缺少协议头

你代码里写的url = "api.openweathermap.org/data/2.5/weather?lat="没有加上https://(或http://)协议头,浏览器会把这个地址当成相对路径来处理,而不是指向OpenWeatherMap的远程API服务器,这肯定发不出正确的请求。

解决办法:给URL补上完整的协议头,推荐用HTTPS(更安全):

var url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${apiKey}`;

2. 跨域资源共享(CORS)限制

如果你的页面是通过file://协议直接打开本地HTML文件,或者部署在和OpenWeatherMap不同的域名下,浏览器的同源策略会阻止XHR请求,这时候Console里会出现CORS相关的报错。

解决办法:

  • 本地搭建一个简单的HTTP服务器运行你的页面,比如用Python:
    # Python 3
    python -m http.server 8000
    
    然后访问http://localhost:8000/你的页面.html,这样就不会有跨域问题了。
  • 或者改用OpenWeatherMap的JSONP接口(在URL末尾加&callback=?参数),不过官方现在更推荐用CORS方案。

3. 代码未完成,请求未实际发送

你给出的代码片段里var URL ...没有写完,大概率是还没完成XHR对象的创建和请求发送逻辑。这里给你补全完整的可运行代码示例:

if (navigator.geolocation) { 
  navigator.geolocation.getCurrentPosition(function(position) { 
    var lat = position.coords.latitude; 
    var lon = position.coords.longitude; 
    var apiKey = "d64b6f0e97c598ccf0f03718d1690fcc"; 
    // 补全协议头和完整参数的URL
    var url = `https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${apiKey}`;
    
    // 创建并发送XHR请求
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    
    // 监听请求成功事件
    xhr.onload = function() {
      if (xhr.status >= 200 && xhr.status < 300) {
        // 解析并处理响应数据
        const weatherData = JSON.parse(xhr.responseText);
        console.log('获取到天气数据:', weatherData);
      } else {
        console.error('请求失败,状态码:', xhr.status);
      }
    };
    
    // 监听网络错误事件
    xhr.onerror = function() {
      console.error('网络请求出错,请检查网络连接或API地址');
    };
    
    xhr.send();
  }, function(error) {
    // 别忘了处理定位失败的情况
    console.error('地理定位失败:', error.message);
  });
} else {
  console.error('你的浏览器不支持地理定位功能');
}

4. API参数或密钥问题

确认一下:

  • URL里是否正确拼接了appid=${apiKey}参数?OpenWeatherMap的所有API请求都必须带这个参数。
  • 你的API密钥是否有效?有没有超过调用次数限制?可以去OpenWeatherMap的后台查看密钥状态。

快速排查技巧

打开浏览器的开发者工具(按F12),切换到Network标签,触发请求后查看对应的API请求:

  • 看请求的完整URL是否正确
  • 看响应的状态码(比如401是密钥无效,400是参数缺失,200是成功)
  • 看Console标签里的报错信息,这能直接告诉你问题所在

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:04:43