2012-07-06 191 views
0

下面包含的是我尝试用来显示另一页的HTML内容的代码。我无法让代码正常工作,并且每次都收到错误。我在这里错过了什么?

$.ajax({ 
    url: 'http://www.msn.com', 
    type: 'GET', 
    dataType : "text/html", 
    success: function (result) { 
     alert('success'); 
     alert(result); 
    }, 
    error: function() { 
     alert('error'); 
} 
}); 
+5

您是否正在尝试执行CROSS DOMAIN请求? – Shyju 2012-07-06 17:30:29

+0

@Shyju:嗨,这个请求是的,但最终我想打内部“http:// myserver/getstuff?id = 2”休息服务来获得XML。不过,我只是在这里测试基础知识,因为对msn.com的这个简单调用不会返回成功(就像我对上面指定的其他服务的调用一样)。但我对ajax很新,所以不确定是否跨域? – Mariah 2012-07-06 17:32:40

+0

好吧,几乎肯定'www.msn.com'不是你的域名。 – 2012-07-06 17:37:05

回答

3

你不能做一个跨域AJAX请求(除非服务器是专门为它设置的)。

您可以做的最好的方式是在您的服务器上调用PHP脚本,该脚本又从其他服务器获取HTML并将其发送回您的页面。

2

您只能对自己的域名发出ajax请求。指向你自己的页面,你的成功函数将被调用。

1

在Chrome中,打开Web Inspector(例如,右键单击,检查元素),然后转到控制台选项卡,然后运行该代码。然后您将实际看到您触发的跨域脚本安全错误。

3

由于浏览器安全限制,大多数“Ajax”请求受same origin policy;该请求无法成功从不同的域,子域或协议中检索数据。

脚本和JSONP请求不受相同的源策略限制。

来源:http://api.jquery.com/jQuery.get/

+0

我也在想jsonp,但不能检索HTML - 不起作用! :) – 2012-07-06 17:44:13

1

如果你真的打算做一个跨域AJAX请求和你正在寻找检索HTML响应你可能想看看this article by James Podolosky,他在那里讨论通过这些管道排序请求YQL,并提供了一个插件来通过覆盖jQuery.ajax函数来自动执行此操作,从而可以按照您的预期在此处使用它。

+0

从你最近的评论中,你已经建议你只是测试,你不打算做跨域请求,在这种情况下,这个插件对你没有用处,我建议你做测试一个本地文件。 – Steve 2012-07-06 17:38:11

1

如果您使用的是外部API,您可以使用YQL(但它不完美)。

检查此fiddle,你会看到它的工作。也许这不适合你,只是把它扔到那里。

+0

酷,thx! ..... – Mariah 2012-07-06 21:00:52