我在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脚本
答案 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对象。