2010-08-09 19 views
1

位一个JavaScript新手在这里的 -JavaScript错误试图解雇简单的XMLHttpRequest时(GET)

我射击的JavaScript代码,这个基本的位从我的网站作为一个测试:

var req = new XMLHttpRequest(); 
req.open('GET', 'http://www.google.co.uk/', false); 
req.send(); 
if (req.status == 200) { 
    alert(req.responseText); 
} 

和我不断收到以下错误:

[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://localhost/testEx3/Default.aspx :: SendRequest :: line 402" data: no]

有没有人知道我在做什么错在这里?

UPDATE:

OK - 所以什么我actaully试图做的是一个POST请求,我在我的本地开发机器上发布的Web服务 - 我居然也得到了同样的错误如上 - 这就是为什么为了简单,我举了这个例子。现在看起来“同源策略”已经发挥作用 - 所以现在我已经发布了带有URI的开始部分的web服务,作为http://localhost/而不是http://tempuri.org/

现在我得到一个500错误。有什么我在标题中缺少的东西?

var request = new XMLHttpRequest(); 
request.open("POST", "http://localhost/ApplicationServices.asmx?op=AddressSearch", false, "", ""); 
request.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 

request.send(x, y, buffer); 

if (request.status == 200) { 
    alert("Success"); 
} 
else { 
    alert("Failure: " + request.status); 
} 
+0

删除了不再起作用的同源标签。 – ajm 2010-08-09 17:39:37

回答

1

除非你在谷歌工作,这是行不通的。您无法通过XMLHttpRequest从其他域中获取信息。这就是所谓的“相同来源政策”。

编辑 —如果您收到来自本地服务器500错误,这意味着你的HTTP请求,它向服务器,并在服务器中的一些代码失败。检查你的服务器日志。

+0

好吧 - 实际上我真的试图对本地的Web服务进行POST请求 - 但它仍然会给出相同的错误。我只是想我会把谷歌网址只是为了让我的问题更容易理解 - 我不知道这个“相同的管理政策”。当然,访问自己的Web服务不是那么难。 – Vidar 2010-08-09 14:07:26

+0

确定请参阅我的编辑。 – Pointy 2010-08-09 14:47:14

4

看起来您正在尝试发送违反same origin policy的请求。

基本上,就AJAX请求而言,您仅限于向发送该请求的页面发送请求到同一个域。例如:

你正在尝试做#3以上。

如果您需要发送跨域请求,您可以使用JSONP或类似flensend/flxhr之类的东西。

+0

我有一个sneeky的感觉,这对我来说是巨大的矫枉过正 - 正如我所要做的只是一个简单的POST请求到我在本地机器上发布的web服务。有更容易的方法吗? 顺便说一句 - 我仍然得到与POST请求相同的错误。 – Vidar 2010-08-09 14:08:31