如何自动将JS文件放入AJAX调用的页面?

时间:2012-04-22 21:15:41

标签: javascript ajax ruby-on-rails-3 file

在我的应用程序中,我已经包含了所有需要的JS文件(我的脚本,Twitter Bootstrap等库)。

问题是,当我有一个通过AJAX调用的请求时,所以在被调用的页面中不包含JS文件,这些文件包含在我的应用程序中,我必须将它们包含在被调用的页面中。

示例: my_scripts.js 包含许多JS函数。

链接到通过AJAX调用的页面

<a href="/articles/create_new" data-remote="true>Create New Article</a>

/views/articles/_create_new.html.haml

...some content of this file.. #here doesn't work the functions from the file "my_scripts.js"

当我输入 /views/articles/_create_new.html.haml 这个链接时

= javascript_include_tag "my_scripts"
...some content of this file..

然后在 /views/articles/_create_new.html.haml 那些JS功能正常工作。

我想问你,如果存在任何方式,如何自动将所有JS文件放在我的每一个AJAX页面中,因为总是将JS文件包含在AJAX页面中并不是好方法...

由于

2 个答案:

答案 0 :(得分:1)

我会通过三种方式之一实现这一目标:

<强>的jQuery

来自http://api.jquery.com/load/

  

脚本执行使用不带后缀的URL调用.load()时   选择器表达式,内容在脚本之前传递给.html()   被删除。这将执行脚本块之前   丢弃。如果调用.load()并附加了一个选择器表达式   但是,在DOM之前,脚本会被删除   更新,因此不执行。两种情况的例子都可以   如下所示:

     

这里,作为文档一部分加载到#a的任何JavaScript都将   成功执行。

     

$('#a').load('article.html');

     

但是,在以下情况下,脚本   被加载到#b的文档中的块被剥离而不是   执行:

     

$('#b').load('article.html #target');

基本上,您可以将JS引用添加到Ajax请求返回的HTML中,jQuery将执行它们。

RequireJS或simular

不是直接返回HTML,而是将HTML作为JSON包的一部分返回,该包也包含一系列脚本引用:

{
    html: '<p>stuff</p>',
    scriptRefs: [ 'js/one.js', 'js/two.js' ]
}

然后我会使用类似RequireJS的东西遍历scriptRefs数组。

只需将代码添加到基页

老实说,我更有可能这样做。

答案 1 :(得分:1)

使用像RequireJS$cript这样的脚本加载器。

让您的页面还回复2件事:要加载的内容和脚本。这最好使用JSON,如:

{
    "content" : "content here",
    "scripts" : ["an","array","of","script","urls"]
}

然后在返回数据时,解析并绘制内容,然后使用脚本加载器加载脚本。实际上,您可以创建自己的脚本加载器。只需动态创建<script>代码,将其放入<head>并为其提供src