2011-06-13 104 views
1

我只需要从特定的(跨域)请求中获取'html'。使用jQuery的ajax来抓取网页

我正在使用传递dataType=json的JQuery.ajax()函数,以便JQuery生成script标记并触发请求。 下面的代码:

  var url="http://www.google.com/callback=?"; 
      $.ajax({ 
       type: 'GET', 
       url: url, 
       dataType: 'json', 
       success: function(data) {$("#out").append("success "+data); }, 
       error: function(data) {$("#out").append("failure "+data); }, 
       complete: function(data) {$("#out").append("complete "+data); }, 
       data: {}, 
       async: false 
      }); 

现在,奇怪的一点是,使用萤火虫,我确实看到生成的脚本标签,并从远程服务器的响应,但没有我的回调被称为。 Jquery's script tag injection for cross domain calls

如何从ajax()调用返回的HTML?我是否首先使用了错误的功能?

回答

0

回调不会被调用,因为返回的文档不是由对该回调的函数调用组成的JavaScript应用程序。

JSON-P通过运行调用页面上的函数的第三方JS工作。

can't use client side code to get content that isn't expressed as JavaScript from a different origin

如果你想获得这样的内容,那么你需要通过服务器代理它。可以是同一来源的任何一个(所以你可以直接获取内容)或者一个transforms it to JSON-P

+0

谢谢Qeuntin。如果你仔细阅读,我试图摆脱相同的原产地政策,而不需要代理。 jsonp破解是为了让浏览器发送请求,我知道浏览器也接收输出,但我不能得到它的处理。我很好,如果回调不执行(async = false应该在这里帮助) – 2011-06-13 07:46:41

+0

浏览器不会让你得到它的处理,这是相同的来源政策的重点。 – Quentin 2011-06-13 07:48:34

+0

好吧,它肯定喜欢萤火虫比它更喜欢我:) – 2011-06-13 08:01:22