Chrome扩展程序中的AJAX请求失败,具有正确的清单权限?

我正在编写Chrome扩展程序,执行简单的ajax调用(基于此示例来自文档):

$.ajax({ type: "GET", url: "http://www.flags.99k.org/getFlags.php" }).done(function(response) { alert("SUCCESS: " + response); }).fail(function(response) { alert("FAILURE: " + response); }); 

请求总是失败,因为警报显示: FAILURE: [object Object]
该URL有效:当我将http://www.flags.99k.org/getFlags.php放入我的地址栏时,我得到了这个:

 [{"UID": "1", "Message": "Hello"}, {"UID": "2", "Message": "World"}, {"UID": "3", "Message": "Hello World"}] 

这是我的manifest.json扩展名。

 { "name": "Hello World", "version": "1.0", "description": "The first extension that I made.", "browser_action": { "default_icon": "icon.png", "default_popup": "popup.html" }, "permissions": [ "http://www.flags.99k.org/" ] } 

我使用Chromium 17.0.963.79(Developer Build 125985 Linux)Ubuntu 11.10。

目前,只允许通过清单中的权限访问根目录。 您必须在URI之后添加通配符到权限:

  "permissions": [ "http://www.flags.99k.org/*" ] 

另请参见: 匹配模式 。

编辑:更新的代码不起作用,因为http://www.flags.99k.org/重定向到http://flags.99k.org/ (没有www )。 所以,还要将此位置列入白名单:

  "permissions": [ "http://flags.99k.org/*", "http://www.flags.99k.org/*" ] 

而不是……

 alert("FAILURE: " + response); 

…做…

 console.debug('FAILURE'); console.debug(response); 

然后,如果你去控制台(在Windows上的ctrl-shift-j),你会看到一个对象,你可以扩展它以查看它的所有属性,什么不是,这真的有帮助。 另外,您在执行请求时是否看过控制台? 您可能会收到一些错误消息。

这可能是一个跨域问题。

当您在地址栏中输入URL时,它可以正常工作,因为它是从主机传送到您的浏览器的。

因为您试图访问托管域之外的完整URL,您可能需要使用JSONP。