【问题标题】:Synchronous XMLHttpRequest Error for getting xml获取 xml 的同步 XMLHttpRequest 错误
【发布时间】:2015-03-13 19:11:15
【问题描述】:

我正在尝试从 openweathermap.org 获取 xml 数据。所以我得到这样的url:“http://api.openweathermap.org/data/2.5/weather?q=London,uk&mode=xml”(这个是为了测试)结果是天气的xml数据。所以 url 对我来说很好。

我想创建一个小型网络应用程序,向我展示我所在城镇的天气。所以首先,我这样做是为了获取 xml:

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.open("GET","http://api.openweathermap.org/data/2.5/weather?q=London,uk&mode=xml", false); //here i get error notice
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 

var firstRow = xmlDoc.getElementsByTagName('temperature');

这可以正常工作但是我在行 xmlhttp.open 中收到错误消息。消息是这样的:

主线程上的同步 XMLHttpRequest 已被弃用,因为它对最终用户的体验产生不利影响。如需更多帮助,请查看http://xhr.spec.whatwq.org/

现在这个问题,有时我请求的 xml 没有加载(所以我的数据是空的)。然后我还用调试器检查它,在这种情况下,xmlhttp.open 是下划线(带有上面的消息)和 xmlhttp.send(),其中错误是空请求。然后我刷新几次,它得到数据。

知道这个错误信息是什么,如何解决?求救

【问题讨论】:

  • 既然您使用的是 jquery,那么根据您给帖子的标签,为什么不使用 jquery 的 ajax API 来代替呢?在这种情况下,您可以使用异步调用并在请求完成时调用一个回调,该回调对数据执行您需要的任何处理。
  • 这条信息的哪一部分你不明白? xmlhttp.open() 的第三个参数必须是 true 才能使用异步 XMLHttpRequest 并避免此消息。然后,您需要为异步响应而不是同步响应编写代码。有关工作示例,请参阅developer.mozilla.org/en-US/docs/AJAX/…。但是,正如 ewh 所说,使用 jQuery 的 Ajax 支持会简单得多。
  • @ewh thx 寻求建议,您能否检查我发布的答案,如果这是可能的解决方案?非常感谢您的帮助

标签: jquery xml xmlhttprequest load


【解决方案1】:

在 ajax API 的帮助下,我基本上做到了:

$.ajax({
  url: "http://api.openweathermap.org...",
  type: 'GET',
  dataType: 'xml',
}).done(function(data){
  xmlDoc = data;
});

现在这似乎工作了(没有错误消息),当我使用 xmlDoc = xmlhttp.responseXML; 时,xmlDoc 现在(调试时)具有与以前相同的数据

【讨论】:

  • 如果你得到了你所期望的,我想它有效:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 2018-09-09
  • 2016-03-03
  • 2021-02-08
相关资源
最近更新 更多