3

BLUF:从 Chrome 扩展程序运行 AJAX 调用无法正常工作。

阿贾克斯:

$.ajax({
    type: "GET",
    url: "http://weather.aero/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=KFBG&hoursBeforeNow=1&fields=raw_text",
    dataType: "xml",
    success: function(xml){
        $(xml).find("raw_text").each(function(){
            var metar = $(this).text();
        });

        $("#ob-body").html(metar);
    }
});

所以我试图从一个需要 GET 来请求数据 XML 的站点获取天气数据。它们提供了构建 URL 请求字符串的技巧,并且在将 URL 粘贴到地址栏中后,相应的 XML 数据就会正确显示。

接下来,我组装了 AJAX 调用并运行它,但似乎没有任何反应。我将成功属性的函数更改为简单的“alert()”并再次运行扩展程序,然后弹出警报框。

警报出现的事实意味着呼叫成功,除非我完全出去吃午饭......那么为什么原始功能不起作用?我意识到搜索 XML 的代码可能不正确,但是在我开始处理文档之前发出警报也没有弹出,这告诉我由于某种原因它根本没有进入函数。

4

2 回答 2

2

这可能是因为 AJAX 请求的同源策略限制。Chrome 允许您在扩展程序中发出跨域 ajax 请求,但我们需要按照文档中的说明向扩展程序清单文件添加权限

看起来您可能必须向清单文件添加跨域访问权限,例如

{
  "name": "My extension",
  ...
  "permissions": [
    "http://weather.aero/"
  ],
  ...
}
于 2013-02-07T17:47:33.510 回答
0

我认为你应该在成功功能中做到这一点:

$(xml).find("raw_text").each(function(){
     var metar = $(this).text();
     $("#ob-body").html(metar);
});
于 2013-02-07T17:45:30.130 回答