通过连续的 ajax 请求多次加载 javascript 文件

Loading a javascript file multiple times via consecutive ajax requests

我有一个页面,上面有大约 30 个表单,用于客户管理,但只有当用户单击打开特定表单时,这些表单才会被调用到页面。输出的一部分是 jQuery.getScript() 函数,用于加载该特定表单的源文件。当表单被保存或取消时,表单会向上滑动并从页面中移除。

我 运行 在一次页面加载中多次打开同一个表单时遇到问题。每次通过 ajax 调用表单时,都会将 js 源文件添加到 dom,因此,在随后的保存事件中,保存功能会执行多次,每次 js 源文件一次已加载到 dom。

我找到了一个解决方案,并检查以确保在我发布之前鼓励大家分享 question/answer。 Seems it is. 我的答案中有下面的解决方案。

这是我想出的解决方案,但也许有人有更好的解决方案。为了社区而分享:

我在最顶层的 js 文件中声明了一个全局变量,在 dom 准备好之外,如下所示:

LoadedScripts = [];

然后在我调用脚本的 php 函数中,我将其设置为有条件的,如下所示:

public static function load($path, $echo = false)
{
    $js = '<script>';
    $js .= 'if(LoadedScripts.indexOf("'.$path.'") == -1) { ';
    $js .= 'jQuery.getScript("'.plugin_url_constant.'/lib/js/'.$path.'"); ';
    $js .= 'LoadedScripts.push("'.$path.'"); ';
    $js .= '}';
    $js .= '</script>';
    if($echo) echo $js;
    else return $js;
}

然后在我的 ajax 请求中,我将其包含在返回的表单顶部:

$output = my_prints_class::load('forms/clients/'.$this->form.'.js');
$output .= $this->displayform();

显然,如果您通过 ajax 获取此脚本标记,您通常不想回显它,但我为非 ajax 目的向函数添加了该选项。