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

时间:2015-03-29 21:42:32

标签: php jquery ajax dom getscript

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

在单页加载时多次打开同一表单时遇到问题。每次通过ajax调用表单时,js源文件都被添加到dom中,因此,在后续保存事件中,保存函数被执行多次,每次将js源文件加载到dom中一次。

我找到了一个解决方案,并检查以确保在发布此问题之前鼓励他们分享问题/答案。 Seems it is.我的答案中的解决方案。

1 个答案:

答案 0 :(得分:0)

这是我提出的解决方案,但也许某人有更好的东西。为了社区而共享:

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

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目的添加了该函数的选项。