1

我正在尝试通过 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,因为这意味着我将无法使用或修改其内容。

4

2 回答 2

3

这是因为您的 Ajax 函数需要json来自提供的 url 的响应并给出html响应,这就是您收到语法错误的原因,您也会从 Chrome 调试器中收到同样的错误。

更新:

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

“出于安全原因,脚本无法访问来自其他域的内容。Mozilla 有一篇关于HTTP 访问控制的长文章,但底线是,如果网站本身没有添加对跨域请求的支持,你就完蛋了。”

参考

解决方案:

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

$.get(url, success: function(data) { // the url that will fetch the external html page for you, located on the same domain
  console.log("ok");
});
于 2012-12-06T10:29:11.460 回答
1

您在这里遇到的问题是您正在跨域调用。尽管您似乎已经意识到这一点并且正在为您的请求使用 jsonp,但您尝试提取的文档(即 wikepedia)并不是 jsonp 文档。因此,一旦 ajax 找到 html 标签,它就会抛出一个错误,正如您所定义的那样,您期望得到 jsonp 响应。

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

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

于 2012-12-06T10:30:57.263 回答