在jquery网站上,它说:
“script”:将响应评估为JavaScript并对其进行评估。
我通过ajax调用和一大块标记得到一块js代码(没有脚本标记)。为了使标记起作用,我需要js代码尽快执行。我是否必须将JS代码附加到dom上才能执行它,或者正如它在jquery网站上所说的那样,只要它得到它就会自动执行?
有人可以帮我吗?
谢谢, →
答案 0 :(得分:2)
如果你指的是jQuery.getScript(),它应该立即执行函数返回的代码。实际上,根据文档,您可以指定一个回调参数,并且此回调是通过加载的脚本传递的,但是在调用回调之前已经执行了加载的脚本。因此,您不必执行任何操作或将其添加到DOM,它将在下载后立即执行。此外,不需要像外部.js文件那样需要脚本标记。
答案 1 :(得分:0)
如果我正确理解您的问题,如果您使用$.getScript()
,则您请求的.js文件将在收到后立即执行。 API docs状态位于顶部。
如果您要求某些服务只返回恰好是JavaScript标记的文本,那么您将不得不将其包装在<script>
标记中,然后将其附加到您的DOM。看看这个link - 它可以很好地介绍你如何做到这一点。它是更纯粹的JavaScript,但是你可以根据需要缩短使用jQuery的一些东西。
本文的一个关键部分是这段代码,展示了如何将JavaScript动态添加到DOM:
var headID = document.getElementsByTagName("head")[0];
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.onload=scriptLoaded;
newScript.src = 'http://api.flickr.com/services/feeds/photos_public.gne?tags=sunset&format=json';
headID.appendChild(newScript);
希望这有帮助。
答案 2 :(得分:0)
也许你应该做两个不同的Ajax查询:
但最简单的方法可能是将您的脚本(正确标记)包含在其余的响应中。我认为它一旦被包含在DOM中就会被评估。
答案 3 :(得分:0)
道格拉斯·克罗克福德frown upon(参见最后一条提示)的另一种方法是eval
从服务器收到的JavaScript代码。
$(document).ready(function(){
var scriptString = "alert('hi');"; //assume I get this from the server
// as a string of JavaScript commands
eval(scriptString); //executed immediately
});