2009-11-28 38 views
2

我有這個示例頁面:原型的Ajax.Updater評估和演示JavaScript函數

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Ajax Page</title> 
<script type="text/javascript"> 
function ajax_hello() { 
    alert ("hello");  
} 
alert ("Hello from JS"); 
</script> 
</head> 

<body> 
This is the Ajax page. 
<a href='#' onclick='ajax_hello();'>Click here to fire off JS function</a>. 
</body> 
</html> 

我這個稱之爲:

new Ajax.Updater($(element), page, { method: "get", evalScripts: true }); 

警報正在運行,但功能不登記(ajax_hello ())。

有沒有辦法讓ajax向調用頁面註冊一個javascript函數?

+1

你怎麼知道它沒有註冊?點擊鏈接時瀏覽器是否發生錯誤? – 2009-11-28 13:56:02

回答

5

作爲對該評論的迴應,我戳了documentation,並且在更新程序評估腳本時,似乎有一些Prototype的特殊規則。腳本可以在響應中的任何地方,但是您需要將任何函數定義分配給全局變量,以使其可用於您的頁面。

關於evalScripts和定義 功能如果使用evalScripts: 真,任何塊將 評估。這並不意味着它會將 包含在頁面中:它們不會。 他們的內容將簡單地傳遞給 原生eval()函數。有 這兩個結果:

本地範圍將爲 原型的內部處理 功能。在var中聲明的腳本 中的任何內容都將在評估後暫時丟棄 ,並且在 之後的任何比率對於 餘下的頁腳本均不可見。如果你在那裏定義了函數,你需要 實際創建它們,否則 將不能訪問頁腳本的其餘 。也就是說, 下面的代碼將無法正常工作:

// This kind of script won't work if processed by Ajax.Updater: 
function coolFunc() { 
    // Amazing stuff! 
} 

您 將需要使用的語法如下:

// This kind of script WILL work if processed by Ajax.Updater: 
coolFunc = function() { 
    // Amazing stuff! 
} 
+0

然後解釋「警報正在運行」。 – 2009-11-28 14:20:54

+0

@Jonathan - 看起來它的處理方式不同,但有一些特殊的考慮。我已更新。 – tvanfosson 2009-11-28 14:34:00

+0

是有意義的,因爲它實際上覆蓋了任何名爲coolFunc()的函數。謝謝! – OneNerd 2009-11-28 15:42:35