我创建了一个包含foo.html
以下内容的 HTML 文件:
<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script>
$.ajax({url:"http://foo.com/mdata",
error: function (results) {
alert("fail");
},
success: function (result) {
alert("sucesses");
}
});
</script>
当我在网络浏览器中加载这个 HTML 文件时,它总是显示一个失败的对话框。
- 知道为什么会这样吗?
- 还有什么是调试这个的最佳方法?
PS:
假设这http://foo.com/mdata
是一个有效的 Web 服务路径。
编辑#1
解决方案
使用 $.getJson http://jsfiddle.net/dpant/EK3W8/的类似代码对我来说工作得很好
我也确实将内容保存为 .html 文件,并且从 file:// 到 Web 服务的请求似乎也有效。
<!DOCTYPE html>
<html>
<head>
<style>img{ height: 100px; float: left; }</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="images">
</div>
<script>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
{
tags: "mount rainier",
tagmode: "any",
format: "json"
},
function(data) {
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});</script>
</body>
</html>
看起来大多数浏览器都支持 CROS,因此您可以编写一个脚本将其保存为 .html 并在浏览器中打开它,它会成功执行 Ajax 请求 *只要您发出请求的服务器支持它 *。在这种情况下,我的 Web 服务器(服务)不支持 CROS(并且 Apache 的默认配置不支持它)。
许多网络服务都启用了 CROS,例如http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?因此请求成功通过。
几个链接:
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS