2009-12-01 5 views
1

Voici ma demande ajax:En utilisant Ajax.Updater pour obtenir un fichier javascript (de prototypejs)

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

Voici ce qui est en/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> 

Ce n'est ni encartage le javascript après l'élément avec le pied de page d'ID et n'exécute pas le script. Il repose sur d'autres bibliothèques javascript incluses sur la page où se déroule la mise à jour. Est-ce que ceci pourrait être où mon problème est?

+0

Quel est le type MIME de/dyn/actions/checkSystemMessage? – TJMonk15

+0

application/x-javascript – Dustin

Répondre

1

Je crois que evalScripts ne fonctionnera que si vos en-têtes de réponse ont un type de contenu "texte/javascript". C'est ce que dit la bibliothèque AJAX que ce que vous obtenez à partir du serveur est un script ..

De plus, vous auriez pas besoin de la majoration: <script type="text/javascript"><!-- et: --></script>

J'espère que cela aide.

+0

Le balisage de script est nécessaire en raison de l'architecture de notre site Web. Le fichier qu'il obtient a l'extension .html. – Dustin

+0

Salut à tous, Si le balisage est requis, je ne suis pas sûr que cela fonctionnera en l'ajoutant à la page. Vous pouvez essayer de désactiver evalScripts car il attend les en-têtes Javascript et le code dans la réponse uniquement. Si cela ne fonctionne pas, alors en dernier recours j'essayerais d'utiliser le DOM pour obtenir le code Javscript depuis le bloc de commentaire () puis eval() 'it. – SuitedSloth

Questions connexes