2012-02-13 128 views
0

我在site1.com上有一个PHP脚本,它返回HTML。比方说,它http://site1.com/script.php和回报:显示来自其他站点的HTML

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

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

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);}) 

而且我收到错误:

Uncaught SyntaxError: Unexpected token < in http://site1.com/script.php line 1

我试过很多的数据类型。什么都没有 如何使它工作?

我不能用在site2.com

+0

看来你的错误来自其他地方。它基本上说,你的脚本中有一个'<'不应该在那里。 – Artyom 2012-02-13 13:57:26

+0

试试这个。 http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/ – 2012-02-13 13:59:47

回答

2

从文档:

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

"jsonp text html"不是 “XML,JSON,脚本或HTML”

如果你想获得跨域数据,而无需使用CORS,那么你必须使用JSONP。

如果使用JSONP,然后您正在获取数据必须在JSONP(其由由具有一个参数要么是一个对象或一个阵列中的单个函数调用的JavaScript程序的),而不是表示纯HTML。

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

+0

任何机会解决问题,而无需将html转换为jsonp? – scifi 2012-02-13 14:03:09

+0

如果不是,我只需要使用php json_encode到所有的html并返回它? – scifi 2012-02-13 14:03:40

+0

您可以改用[CORS](http://caniuse.com/#search=cors)。 – Quentin 2012-02-13 14:04:56

-1

任何PHP脚本你告诉了jQuery像对待JSON数据。刚删除

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

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

+1

它不会好。它位于不同的域。 – Quentin 2012-02-13 13:59:12

+0

如果我删除,我会收到起源http://site2.com是不允许的访问控制,允许来源。 – scifi 2012-02-13 14:00:57

0

这个东西只会在这个脚本在“site1.com”上运行时才起作用。

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

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('http://site1.com/script.php', function(data) { 
    $(body).prepend(data['add_me']); 
    alert('Load was performed.'); 
}); 

现在,浏览器的尝试执行<div id="test"><img src="path"/></div>(或其他)为脚本和扼流圈上的“<” 。

阅读更多关于使您的生活复杂化的同源政策(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/

相关问题