显示其他网站的HTML

时间:2012-02-13 13:53:26

标签: php jquery ajax

我在site1.com上有一个返回HTML的php脚本。让我们说http://site1.com/script.php并返回:

<div id="test"><img src="path"/></div>

我想收到并在site2.com上显示HTML

AJAX。 jQuery的。

$.ajaxSetup({
    crossDomain: true,
    dataType: "jsonp text html" //like documentation said
});
$.get("http://site1.com/script.php", { param: param}, function(data)    {$("#some_id").html(data);})

我收到错误:

  

未捕获的SyntaxError:意外的令牌&lt;在http://site1.com/script.php第1行

我尝试了很多dataTypes。什么都行不通。 如何使其有效?

我无法在site2.com上使用任何php脚本

4 个答案:

答案 0 :(得分:2)

来自文档:

`dataType` String
Default: Intelligent Guess (xml, json, script, or html)

"jsonp text html"不是“xml,json,script或html”

如果您想在不使用CORS的情况下获取跨域数据,则必须使用JSONP。

如果你使用JSONP,那么你要获取的数据必须用JSONP 表示(它由一个JavaScript程序组成,该程序包含一个函数调用,其中一个参数是一个对象或一个数组)而不是纯HTML。

您收到错误是因为您尝试执行HTML文档,就好像它是JavaScript一样。

答案 1 :(得分:1)

JSONP代表“带填充的JSON”。这里的填充是一个函数调用:JSONP将来自一个域的JSON数据作为参数传递给回调函数,然后可以作为另一个域的脚本执行。您应该在site1.com上设置PHP脚本,以便在查询字符串中容纳回调 - 也就是说,http://site1.com/script.php?callback=foo的GET请求应该返回:

foo (
  { 'add_me' : '<div id="test"><img src="path"/></div>' }
)

。然后你可以在site2.com的脚本中使用jQuery的$ .get(),如下所示:

$.get('http://site1.com/script.php', function(data) {
  $(body).prepend(data['add_me']);
  alert('Load was performed.');
});

现在,浏览器尝试将<div id="test"><img src="path"/></div>(或其他)作为脚本执行并在'&lt;'上执行choke。

详细了解使您的生活复杂化的同源政策(SOP):http://en.wikipedia.org/wiki/Same_origin_policy。了解JSONP:http://www.ibm.com/developerworks/library/wa-aj-jsonp1/。了解一些SOP解决方法:http://www.ibm.com/developerworks/web/library/wa-crossdomaincomm/index.html?ca=drs-。实施比我上面描述的解决方案更现代,更简单的解决方案:http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

答案 2 :(得分:0)

只有在“site1.com”上运行此脚本时,此内容才有效。

如果情况并非如此,那么您唯一的选择就是使用JSON-P。 JQuery内置了对JSON-P的支持,当你调用$ .getJSON()并粘贴“?callback =?”时,jQuery会自动使用它。到要呼叫的URL。

答案 3 :(得分:-1)

你告诉jquery处理像json这样的数据。只需删除

 dataType: "jsonp text html" //like documentation said

应该没问题。你必须告诉jquery将返回的数据视为html代码,而不是json对象。