相关疑难解决方法(0)

Grails Resources插件和AJAX加载了javascript

我在grails 1.3.7应用程序中添加了资源插件,除了异步加载的javascript之外,一切正常.

所以,如果我有一个包含a的模板

<r:script>
    // javascript here
</r:script>
Run Code Online (Sandbox Code Playgroud)

并通过ajax加载js代码不执行,我得到这个错误:

看起来您缺少对r:layoutResources标记的一些调用

这是有道理的,因为页面已经被渲染,并且没有r:layoutResources来处理新添加的r:script js代码.

我发现的唯一的解决方法是添加 render r.layoutResources(disposition:"defer") 后,实际render(template:...)在异步呈现内容的控制器操作.

还有其他更明确的解决方案吗?

javascript ajax grails grails-plugin

17
推荐指数
1
解决办法
7675
查看次数

有没有办法告诉jQuery不要对HTML的ajax请求评估脚本

我正在使用jQuery发出ajax请求,并且一切正常。但是它在错误的上下文中评估脚本。

我有一个iframe(相同的域,这里没有后顾之忧),我正在尝试使脚本在iframe的上下文中进行评估,而不是发出ajax请求的位置-例如。不同的框架。

我想我可以告诉Ajax不要评估脚本,而我会自己做工作以在正确的环境中评估脚本。有什么想法或禁用自动评估的方法吗?

编辑

因此,对于最初的问题,我有些不对。加载时不会评估脚本,而是将内容放置在文档中时才评估脚本。您可以通过测试示例来了解这一点:

$('#some_element').html('<span>content</span><script>alert(window)</script>');
Run Code Online (Sandbox Code Playgroud)

现在,当从不同的框架执行此操作时,评估将在调用的范围内进行,而不是要在其中插入内容的元素。

我最终在不使用jQuery的情况下设置了内容,然后查找/避开了任何脚本标签:

element.get(0).innerHTML = data;
element.find('script').each(function() {
  otherWindow.eval(this.innerText);
});
Run Code Online (Sandbox Code Playgroud)

最终更新

我最终将其跟踪到源,并从那里覆盖它。.下面是coffeescript,但是您可以理解。我选择覆盖它是因为对于我来说,它永远不会在顶部窗口中发生,但是应该在iframe内容中出现。

    $.globalEval = (data) -> (iframeWindow.execScript || (data) -> iframeWindow["eval"].call(iframeWindow, data))(data) if (data && /\S/.test(data))
Run Code Online (Sandbox Code Playgroud)

ajax iframe jquery

5
推荐指数
1
解决办法
3351
查看次数

Javascript AJAX包含文件以及eval

假设我有

1)HTML文档.

2)这个HTML文档加载Javascript文件"code.js",如下所示:

<script src="code.js">
Run Code Online (Sandbox Code Playgroud)

3)用户点击"code.js"中运行"fetchdata"功能的按钮,

4)"fetchdata"函数如下所示:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState==4) {
        myjsdata = xmlhttp.responseText;
    }
}
xmlhttp.open("GET", 'http://www.example.com/data.js', false);
xmlhttp.send(null);
Run Code Online (Sandbox Code Playgroud)

...

现在我如何成功完成以下操作:

我想以某种方式插入/评估我的Javascript,因此"code.js"中的所有函数(包括"fetchdata"和上面/下面定义的函数)都可以访问"中的数据(结构,声明,预先计算的数据值等)". data.js".

(如果这是可能的,那么我会等到加载实际的JS数据文件,直到用户明确请求它为止.)

javascript ajax scope eval include

4
推荐指数
2
解决办法
1万
查看次数

标签 统计

ajax ×3

javascript ×2

eval ×1

grails ×1

grails-plugin ×1

iframe ×1

include ×1

jquery ×1

scope ×1