我试图通过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,因为这意味着我将无法使用或修改其内容。
答案 0 :(得分:3)
因为你的Ajax函数需要来自提供的网址的json
响应并且它会给出html
响应,这就是你得到语法错误的原因,同样的错误你会也可以从Chrome调试器中获取。
<强>更新强>
您尝试做的事情称为跨域请求。
&#34;出于安全原因,脚本无法访问其他域中的内容。 Mozilla有一篇关于HTTP access control的长文章,但最重要的是,如果没有网站本身添加对跨域请求的支持,你就会搞砸了。&#34;
<强>解决方案:强>
您可以通过后端脚本解决此问题,该脚本将为您提供外部页面。就像代理服务器一样,它驻留在同一个域中,因此您不必面对跨域问题。 您可以通过
加载它们$.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/ 希望有所帮助