【发布时间】:2013-03-14 13:29:17
【问题描述】:
我创建了一个 HTML 文件 foo.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 是一个有效的网络服务路径。
编辑#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
【问题讨论】:
-
我收到 500 服务器错误...
-
尝试在你的ajax请求中的url末尾添加
/ -
我更改了网络服务名称。假设它工作正常,是否还有其他原因导致它无法正常工作。
-
@GreenLeaf:还是没有运气。
-
您正在尝试执行跨域脚本。请不要。
标签: jquery ajax local-files