2012-02-23 98 views
1

誰能告訴我爲什麼下面的函數可能不工作。 get調用應返回html和<script>的混合。我試圖找到腳本元素,然後評估裏面的東西。但它似乎並沒有工作。通過jquery ajax評估腳本調用

任何想法?

function showRecaptcha() 
{ 
alert("test1"); 
var file = "recapatchatest.php"; 
$("div#commentWindow").get("../commentfiles/" + file, function(data) 
{ 
    var script = data.getElementsByTagName("script"); 
    $("div#commentWindow").html(eval(script)); 
}); 
} 
+0

看看這個答案:http://stackoverflow.com/a/2699905 – 2012-02-23 20:27:41

回答

1

加載通過AJAX的HTML網頁,解析出<script>標籤,並eval荷蘭國際集團他們聽起來像一個壞主意。

當附加到DOM時,<script>標籤將自動運行。所以,只需將data附加到DOM,您的腳本就會運行。

或者,將腳本放在自己的文件中,然後用$.getScript加載它們。

另外,$("div#commentWindow").get應改爲$.get

$.get("../commentfiles/" + file, function(data) 
+0

好吧,你的建議是有幫助的 - 這種方式感覺真的很複雜 – Jeff 2012-02-23 20:43:23

+0

@Jeff:爲了簡單起見,我喜歡讓我的腳本分開從我的HTML。 – 2012-02-23 20:45:59

+0

是的,這可能會有很大幫助 – Jeff 2012-02-23 20:49:11

2

您沒有使用正確的.get()方法。你有者區分這兩種:

  • .get()(您使用的一個) - 檢索從jQuery對象匹配的元素指定索引處DOM元素。

  • jQuery.get()($獲得()) - 從使用HTTP服務器的負載數據獲取

所以,你顯然應該使用第二個。

請注意,data的內容不會是您可以調用getElementByTagName的DOM元素,它只是一個HTML數據字符串。


如果你想HTML加載到現有的元素,你應該考慮使用.load()這不正是你追求的:

.load(URL [數據] [, complete(responseText,textStatus,XMLHttpRequest)])返回:jQuery

描述:從服務器加載數據並將返回的HTML放入匹配元素中。

+0

我使用'.load'很多 - 但是當我這樣做的時候,我打電話給的頁面

0

jQuery的get方法將一個字符串傳遞給回調函數。 data.getElementsByTagName不起作用,因爲getElementsByTagName不適用於String對象實例的有效方法。

我不知道你爲什麼使用eval方法。該方法適用於JavaScript代碼,甚至忽略了您對script變量的分配存在缺陷,因此您的意圖是在HTML SCRIPT元素的數組上調用eval

最後一個問題是,jQuery的html方法會忽略您傳遞給它的任何HTML標記字符串中的SCRIPT標記。

如果你想添加SCRIPT標籤到DOM你將需要使用普通的'香草JavaScript和繞過jQuery完全。