jQuery AJAX请求不评估其他域上的脚本?

时间:2011-08-24 12:32:36

标签: ajax jquery

因此,this question告诉我jQuery ajax请求不会将脚本标记插入到DOM中,但jQuery会对它们进行评估。我正在将一些内容加载到div中,在该div中我有一些按钮由AddThis提供。这些按钮的代码包含http://s7.addthis.com的脚本。 jQuery似乎没有评估这个脚本,我没有看到我的按钮。它愉快地评估了我自己的域中加载到同一请求中的另一个脚本。

有没有办法让jQuery评估来自其他域的脚本,还是有充分的理由说明这种行为,这意味着我需要以不同的方式做到这一点?

感谢阅读。

1 个答案:

答案 0 :(得分:2)

jQuery's ajax方法抽象了很多平台,并使用案例细节来制作任何类型的异步Web请求

您可以使用各种参数组合调用ajax方法,每次都会在幕后执行完全不同的工作流程(同义词包括jQuery.get()jQuery.post()jQuery.getJSON()jQuery.getScript())。

如果您要求同一域上的网页作为当前页面,则jQuery不会使用<script>标记,除非明确告知(通过将crossDomain设置为true)。相反,它将使用传统的AJAX方法; XMLHttpRequest Object(并回退到ActiveX的各种Microsoft实现)。

但是,在您向不同域发出请求的情况下,由于 same origin policy < question/answer < / em>在所有现代浏览器中。在这些情况下,jQuery.ajax 使用<script>标记(该技术名为JSONP)。

JSONP要求服务器的响应以特殊方式制定;即有效的JavaScript,你的回答不是。值得注意的是,JSONP 需要服务器的合作。有关详情,请参阅此Wikipedia或{{3}}上的详细信息。

您的代码正在您的域上运行,因为服务器的响应不需要是有效的JavaScript(它不是)。但是,当ajax()开始自动使用JSONP时,您无法满足有效的JavaScript要求。