Использование Ajax.Updater для получения файла JavaScript (prototypejs) - PullRequest
1 голос
/ 01 декабря 2009

Вот мой запрос ajax:

new Ajax.Updater({ success: 'footer' }, '/dyn/actions/checkSystemMessage', {
      insertion: 'after',
      evalScripts: true
    });

Вот что находится в / dyn / actions / checkSystemMessage:

<script type="text/javascript"><!--

document.observe('dom:loaded', function() {

    buildSystemMsg = function(SystemMsg) {
        //behind container
        behindContainer = new Element('div', {id: 'behind-system-message'});
        behindContainer.setStyle({display: 'none'});
        document.body.appendChild(behindContainer);

        //main container
        container = new Element('div', {id: 'system-message'}).update(SystemMsg);
        container.setStyle({display: 'none'});
        document.body.appendChild(container);

        //hide button
        hideBtn = new Element('a', {'class': 'close-button', 'title': 'Close System Message'}).update('Close');
        hideBtn.setStyle({ marginTop: '5px'});
        container.insert({bottom: hideBtn});

        offsetY = container.getHeight();

        //show
        if ($('mod-system-alert'))
        { new Effect.Move($('mod-system-alert'), { queue: 'front', x: 0, y: offsetY, mode: 'relative', duration: 0 }); }
        new Effect.Move($('footer'), { queue: 'front', x: 0, y: offsetY, mode: 'relative', duration: 0 });
        new Effect.Move($('page-container'), { queue: 'front', x: 0, y: offsetY, mode: 'relative', duration: 0 });      
        new Effect.Move($('nav'), { queue: 'front', x: 0, y: offsetY, mode: 'relative', duration: 0 });
        new Effect.Move($('header-container'), { queue: 'front', x: 0, y: offsetY, mode: 'relative', duration: 0 });
        Effect.BlindDown(behindContainer, { queue: 'front', duration: 0 });
        Effect.BlindDown(container, { queue: 'end', duration: 0.5 });


        hideBtn.observe('click', function() {
            if ($('mod-system-alert'))
            { new Effect.Move($('mod-system-alert'), { queue: 'front', x: 0, y: -offsetY, mode: 'relative', duration: 0 }); }
            new Effect.Move($('footer'), { queue: 'end', x: 0, y: -offsetY, mode: 'relative', duration: 0 });
            new Effect.Move($('page-container'), { queue: 'end', x: 0, y: -offsetY, mode: 'relative', duration: 0 });       
            new Effect.Move($('nav'), { queue: 'end', x: 0, y: -offsetY, mode: 'relative', duration: 0 });
            new Effect.Move($('header-container'), { queue: 'end', x: 0, y: -offsetY, mode: 'relative', duration: 0 });
            Effect.BlindUp(behindContainer, { queue: 'front', duration: 0 });
            Effect.BlindUp(container, { queue: 'front', duration: 0.5 });
            set_cookie("HideSystemMsg", true);          
        });
    }

    hideMsg = get_cookie("HideSystemMsg");
    systemMsg = '${SystemMsg}';
    if (systemMsg.length > 0 && !hideMsg)
        buildSystemMsg(systemMsg);

});

--></script>

Это не вставка javascript после элемента с идентификатором нижнего колонтитула и не выполнение скрипта. Это зависит от других библиотек JavaScript, которые включены в страницу, где происходит обновление. Может ли это быть там, где моя проблема?

1 Ответ

1 голос
/ 01 декабря 2009

Я полагаю, что evalScripts будет работать только в том случае, если заголовки вашего ответа имеют тип содержимого "text / javascript". Это то, что говорит библиотеке AJAX, что вы получаете с сервера скрипт.

Кроме того, вам не понадобится наценка: <script type="text/javascript"><!-- и: --></script>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...