【发布时间】:2011-06-30 11:38:12
【问题描述】:
我正在尝试在我的主域 (http://foo.com) 和我的 API (http://api.foo.com) 之间开发请求。
为了绕过跨子域的限制,我在我的主页 (http.//foo.com/main.html) 上使用了一个 iframe,指向那里的 iframe.html 页面:scripts.api.foo .com。
(scripts.api.foo.com 和 foo.com 在同一个服务器上,api.foo.com 在另一个服务器上)
>iframe.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Iframe</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
document.domain = 'foo.com';
function testIframe()
{
$.ajax({
url: "http://api.foo.com/utctime",
timeout: 7000,
complete: function(jqXHR, textStatus){
parent.alert(jqXHR.status);}
});
}
</script>
</body>
</html>
>main.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
document.domain = 'foo.com';
function test()
{
pipeFrame.testIframe();
}
</script>
<iframe style="" src="http://scripts.api.foo.com/iframe.html" width="500" height="50" id="pipeFrame" name="pipeFrame"></iframe>
<form>
<p>
<input type="button" value="Hop" onclick="test();" />
</p>
</form>
</body>
</html>
警报窗口始终包含“302”(重定向)(使用 Firefox 3.6/Chrome),“0”(使用 IE8)...虽然 Firebug 告诉我我的请求得到了“200 Ok”状态(无响应)...
我已尝试直接在 scripts.api.foo.com/iframe.html 上发起相同的请求,并获得相同的状态码。
我很沮丧,在网上搜索了一个明确的方法来实现跨子域,或者关于这些状态代码的解释...... 欢迎任何帮助。
非常感谢您的关注。 再见。
【问题讨论】:
标签: jquery ajax iframe cross-domain subdomain