2012-06-20 55 views
1

我在主index.html文件中定義了Javascript函數。
此頁面的一部分使用Ajax進行更新(使用prototype.js)。嘗試在返回的AJAX代碼中執行主文件中定義的Javasript函數失敗。
evalScripts:Ajax.Updater中的true選項prototype.js函數沒有幫助。
我該如何解決這個問題?先謝謝你。如何在Ajax響應中執行在主窗口中定義的Javascript函數

這是我的index.html文件:

<html> 
<head> 
<script src="js/lib/prototype.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    function foo(x) { 
     alert(x); 
    } 

    function loadContent() { 
     new Ajax.Updater('responseArea', 'response.php' , { evalScripts: true }); 
    } 
</script> 
</head> 

<body> 
    <div id="main"> 
     <span style="cursor: pointer" onclick="loadContent();">Click on me to call Ajax response</span><br> 
     <br></br> 
    </div> 

    <div id="responseArea"> 
     This will be replaced with Ajax response 
    </div> 
</body> 
</html> 


This is response.php: 
    <?php 
     echo '<span style="cursor: pointer" onclick="foo("foo Called from within Ajax response");"> 
      Click on me to call foo from within Ajax response</span>'; 
    ?> 
+0

你需要在你的回聲中轉義那些雙引號 – jbabey

回答

0

由於evalScriptstrue,你可以把任何JS在你的迴應片斷當AJAX調用完成它將被執行:

<script type="text/javascript"> 
foo("foo Called from within Ajax response"); 
</script> 

如果你不想執行,但只是想包含更多的JS,你可以插入一個普通的JS include標籤:

<script type="text/javascript src="yournewcode.js"></script> 

這比在內嵌JS版本更好,因爲它允許瀏覽器緩存文件。

+0

非常感謝你的回答。我嘗試過,它的工作原理。但並不完全如此 - 它立即執行響應代碼中的所有腳本。我希望這些函數可以在AJAX響應中訪問,但不必在AJAX調用完成後全部執行它們。例如,在response.php代碼中,當用戶點擊span時,foo函數應該執行。現在它只是立即執行。有沒有解決它的方法? – user1469169

+0

我將編輯回覆。 –

+0

比你增加。我嘗試過 - 但沒有奏效。這是我的response.php文件現在:
\t \t Ajax響應的 點擊我從Ajax響應中調用foo'; (x);這是f.js:function ff(x){ \t alert(x); } – user1469169

相關問題