我在Mac OS X上的Apache Webserver上创建了一个html / javascript网站。该网站通过XmlHttpRequest使用带有JSON的.NET Web服务。此Webservice正在Windows Vista计算机上运行。
可以使用此网址访问该网站:http://macintosh.companyname.local/~username/Sitename/index.html.
当我用带有这个URL的Safari在Mac上打开网站时,我没有从Web服务中获得任何JSON数据。
当我使用网址file://Users/username/Sites/Sitename/index.html
打开网站时,它可以正常运行。
我的第一个想法是与XmlHttpRequest有关,它在许多浏览器中都有安全限制,但我不确定为什么当我通过网络服务器而不是html的绝对路径调用网站时它不起作用文件。
这里我用来调用Webservice的代码:
<div id="eigenRisico" class="panel" title="Eigen Risico">
<h2>Eigen Risico Per Polis</h2>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://webserviceurl/GetEigenRisicoVerzekerde", true);
xhr.onreadystatechange = function(){
if (xhr.readyState === 4) {
var result = eval('(' +xhr.responseText+')');
var ihtml="";
var j = 0;
for(i = 0; i < result.d.length/2; i++) {
ihtml=ihtml+"<fieldset><div class='row'><label>Polisnummer:</label><span>"+result.d[j]+"</span></div>";
j++;
ihtml=ihtml+"<div class='row'><label>Resterend Eigen Risico:</label><span>&euro "+result.d[j]+"</span></div></fieldset>";
j++;
}
document.getElementById('eigenRisico').innerHTML = ihtml;
}
};
xhr.setRequestHeader("content-type", "application/json");
var postData = '{"bsn": "999999999"}';
xhr.send(postData);
</script>
</div>
有人知道为什么会这样吗?
答案 0 :(得分:3)
您无法执行跨域ajax请求
请参阅http://en.wikipedia.org/wiki/Same_origin_policy
您可以通过在您自己的域上设置代理页面来解决此问题,该代理页面将接收请求并重定向它,然后将输出重定向回给您。
你在运行PHP吗?或其他服务器端处理?
修改强>
只是为了澄清您的原始问题,从file://读取时,安全策略与http://不同。本地资源被认为是可信的,因此允许ajax请求通过。作为一个网址,它看起来就像一个网站以你的名义做事,也许不应该这样做。