2009-12-01 50 views
1

這裏是我的Ajax請求:使用的Ajax.Updater得到一個JavaScript文件(prototypejs)

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

這裏是在5 /達因/動作/ 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> 

這既不是插在具有ID頁腳的元素之後的javascript也不執行腳本。它確實依賴於發生更新的頁面上包含的其他JavaScript庫。這可能是我的問題在哪裏?

+0

什麼是/ dyn/actions/checkSystemMessage的MIME類型? – TJMonk15 2009-12-01 20:40:04

+0

application/x-javascript – Dustin 2009-12-03 16:32:31

回答

1

我相信evalScripts只有在您的響應頭文件中包含「text/javascript」內容類型時纔有效。這就是告訴AJAX庫正是你從服務器得到的是一個腳本..

此外,你就不需要標記:<script type="text/javascript"><!--,並:--></script>

我希望這有助於。

+0

由於我們的網站架構,腳本標記是必需的。它獲得的文件具有擴展名.html。 – Dustin 2009-12-01 21:12:56

+0

您好, 如果標記是必需的,那麼我不確定它是否會工作,只需將其附加到頁面。您可能想要嘗試關閉evalScripts,因爲它僅在響應中使用Javascript標頭和代碼。 如果這不起作用,那麼作爲最後的手段,我會嘗試使用DOM從註釋塊()中實際獲取Javscript代碼,然後使用eval()處理它。 – SuitedSloth 2009-12-07 18:40:25

相關問題