外部HTML检索

时间:2012-12-06 10:25:48

标签: javascript jquery

我试图通过ajax调用获取http://en.wikipedia.org的内容。为此,我使用jQuery。这是代码:

jQuery.ajax({
  url:"http://en.wikipedia.org",
  crossDomain: true,
  dataType: "jsonp",
  jsonpCallback: "myCallback"
});

function myCallBack(data){
  console.log("ok");  
}

问题是我在Firebug中遇到了这个错误:

SyntaxError: syntax error
<!DOCTYPE html>

所以我会说提取html内容,虽然回调函数没有运行。在某些时候它会遇到指定的标记,抛出此错误并停止运行脚本。

你知道问题可能在哪里吗?

有没有其他方法可以获取html页面的内容?我不想使用iframe,因为这意味着我将无法使用或修改其内容。

2 个答案:

答案 0 :(得分:3)

因为你的Ajax函数需要来自提供的网址的json响应并且它会给出html响应,这就是你得到语法错误的原因,同样的错误你会也可以从Chrome调试器中获取。

<强>更新

您尝试做的事情称为跨域请求。

&#34;出于安全原因,脚本无法访问其他域中的内容。 Mozilla有一篇关于HTTP access control的长文章,但最重要的是,如果没有网站本身添加对跨域请求的支持,你就会搞砸了。&#34;

Reference

<强>解决方案:

您可以通过后端脚本解决此问题,该脚本将为您提供外部页面。就像代理服务器一样,它驻留在同一个域中,因此您不必面对跨域问题。 您可以通过

加载它们
$.get(url, success: function(data) { // the url that will fetch the external html page for you, located on the same domain
  console.log("ok");
});

答案 1 :(得分:1)

您在这里遇到的问题是您跨域呼叫。虽然你似乎已经意识到这一点,并且正在使用jsonp来处理你的请求,你试图提取的文件即wikepedia不是jsonp文档。因此,只要ajax找到html标签,它就会抛出一个恐怖,因为你已经定义了你期望的jsonp响应。

由于跨域问题,您不能仅使用javascript在域中提取其他网站数据,如果您想要完成您在此处所做的工作,则需要使用后端语言来获取数据。

有用链接是http://json-p.org/ 希望有所帮助