2

我有一个之前在这个论坛上被问过的编码困难:

调用从 Ajax 响应返回的 JavaScript 函数

但我没有找到令人满意的答案。为了更准确地说明我正在处理的问题,以下是详细信息:

我使用 jquery 动态加载文档(HTML 和 javascript)

var url = 'document.php';
$('#container').load(url);

document.php 的示例:

<form>
    <input name="firstname"></input>
</form>
<script>
    function dosomething()
    {
        console.log($('input[name=firstname]').val());
    }
</script>

* dosomething() 函数是我想稍后调用的函数

然后我想调用该 document.php 中的函数。由于我的要求,我不想在文件加载后调用该函数,而是在以后需要时调用它。因为它是动态加载的,所以 DOM 无法识别这些函数。如何正确调用此函数?

谢谢

4

2 回答 2

1

the DOM doesn't recognize the functions

This sounds like your other functions are wrapped in $(document).ready() in the remote page. If that is the case they are out of scope for you to call them from code in the main page and you need to move them out of the ready handler to make them globally accessible.

EDIT: Other possibilities

Script tags in head- move to body after html, or use $.getScript in ajax callback to retrieve

于 2012-06-24T22:02:11.453 回答
0

我认为您正在尝试实现称为on-demand javascript(或lazy-loading)的技术。换句话说,您的页面最初应该只加载一个小脚本 - 但使用一堆对象和函数,这些对象和函数在其他一些文件中可用,但会在需要时加载。

如果是这种情况,我必须警告您:您可能需要更新现有代码。不要只是按原样调用某个函数,在所有令人兴奋的荣耀中,您应该首先检查它的存在 - 如果它不可用,请等待它的加载:

if (typeof lazyObjects.someLazyFunction !== 'function') {
  lazyLoad('lazyFunction.js');
}
lazyObjects.someLazyFunction();

这里的关键点是lazyLoad应该是同步的。换句话说,您必须等到包含您的函数的脚本被实际加载。否则 someLazyFunction 在被调用时不会被定义,即使有这种检查。

lazyFunction.js反过来,将包含一些将改变的代码,将lazyObjects所需的方法作为属性添加到它们中:

// in lazyFunction.js
lazyObjects.someLazyFunction = function() { ... }

虽然在=window这些情况下使用全局 ( ) 对象在技术上是可行的,但我通常不这样做 - 也不建议这样做。

看,没那么简单。) 我建议阅读这篇文章以了解有关此技术的更多信息 - 并实际使用一些已建立的组件在您的代码中实现它(其中一些在链接的文章中提到)。

于 2012-06-24T22:31:31.593 回答