2015-03-29 2 views
0

У меня есть страница с 30 формами на ней, для управления клиентами, но формы вызываются только на страницу, когда пользователь нажимает, чтобы открыть конкретную форму. Часть вывода - это функция jQuery.getScript() для загрузки исходного файла для этой конкретной формы. Когда форма сохраняется или отменяется, форма открывается и удаляется со страницы.Загрузка файла javascript несколько раз через последовательные запросы ajax

У меня возникла проблема при открытии одной и той же формы более одного раза при загрузке одной страницы. Исходный файл js был добавлен в dom каждый раз, когда форма была вызвана через ajax, и, таким образом, при последующих событиях сохранения функция сохранения выполнялась несколько раз, раз для каждого раза, когда исходный файл js был загружен в dom.

Я нашел решение и проверил, чтобы было предложено поделиться вопросом/ответом, прежде чем я разместил это. Seems it is. Решение ниже в моем ответе.

ответ

0

Вот решение, с которым я придумал, но, возможно, у кого-то есть что-то еще лучше. Общий для сообщества:

объявляю глобальную переменную в моем верхнем файле 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; 
} 

Тогда в моей АЯКС просьбе я включить это в верхней части формы возвращаются:

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

Очевидно, что если вы получаете этот скриптовый тег через ajax, вы не хотите его эхо в целом, но я добавил параметр функции для целей, отличных от ajax.

Смежные вопросы