对Web URL的Ajax调用导致javascript错误

时间:2012-09-11 06:54:04

标签: javascript ajax denied

我们一直在为我们的应用程序使用Ajax调用,并且它一直适用于服务器域中的URL。但是,当我在网络上使用ajax调用url时,如果没有正确的错误消息,我发现它失败了。我在网上搜索了给定的详细信息,但无法找到任何合理的原因或解决方案。

我的代码是一个简单的ajax调用,如下所示。

var url = "http://www.google.com";
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    alert('done');
    }
  };
xmlhttp.open("GET",url,true);
xmlhttp.send();

如果网址来自服务器域,则无任何问题,但是当这是一个像google这样的开放网络网址时,它会在不同的浏览器中以不同的行为失败。

在IE9中,xmlhttp.open(" GET",url,true)出现“Javascript错误:拒绝访问”#39;和xmlhttp.status成为'由于错误c00c023f'

,无法完成操作

在Chrome和FF中,日志中没有显示错误,但xmlhttp.status变为0

在所有情况下,ajax调用都不成功。

这种问题的原因可能是什么?我不认为这是一个网络问题,因为如果直接在浏览器上试用,我可以访问谷歌网址。那么,什么可能阻止它从浏览器尝试ajax调用?

此致 Vijay.K

1 个答案:

答案 0 :(得分:1)

跨域查询在IE 9,Chrome,Firefox中不起作用。这是一个安全问题。但是,为什么你仍然使用XHR?你可以使用jQuery的真棒$.ajax吗?为此,您可以简单地使用这种方式:

$(document).ready(function(){
    $.ajax({
        url: "http://www.google.com/",
        success: function(){
           alert("Done!");
        }
    });
});

这里的问题是您正在尝试访问跨域,这是一种安全违规,状态将始终返回0,无论您做什么。检查小提琴。

小提琴:http://jsfiddle.net/uazqY/