2013-04-25 109 views
0

我的AJAX響應返回是這樣的:提取和執行腳本

<div> 
.. 
</div> 

<script type="text/javascript"> 
.. 
</script> 

<script type="text/javascript"> 
.. 
</script> 

<div> 
.. 
</div> 

我想以後執行從腳本標記腳本(應該工作的跨browserly)和插入文本(div的)頁。

+0

好jQuery的有建於... – epascarello 2013-04-25 13:24:24

+0

嘗試[.load()](http://api.jquery.com/load/) – 2013-04-25 13:25:21

回答

0

感謝所有。 我創造了這樣的解決方案:

var scripts = []; 
$(response).each(function(key, element){ 
    if ($(element).is('script')) { 
     scripts.push(element.innerHTML); 
    } else { 
     $('test').append($(element)); 
    } 
}); 
$.each(scripts, function(key, element){ 
    eval(element); 
}); 
0

您的script標記不需要type="text/javascript"屬性以實現跨瀏覽器兼容性。

而你的JavaScript將自上而下執行。所以無論腳本先來,都會先執行。最後添加您的文本插入,這樣的事情:

HTML:

<div id="myDiv"></div> 

的JavaScript:從Ajax響應

document.getElementById("myDiv").innerHTML = "hello"; 
+0

關於這一點,' text/javascript'是Netscape自'腳本'的默認類型;) – MMM 2013-04-25 14:11:12

0

提取腳本通常是不好的做法(緩存,安全性,...) 。 處理Ajax響應中返回的數據(JSON)會更好。考慮使用JQuery或其他框架,因爲它們提供了跨瀏覽器功能和DOM操作內置。

請參見下面的DOM操作例如:

$(document).ready(function() { 
    var $grouplist = $('#groups'); 
    $.each(myData, function() { 
    $('<li>' + this.name + '</li>').appendTo($grouplist); 
    }); 
}); 

@http://jsfiddle.net/qmacro/NJMyD/

如果你想留在沒有框架的原生功能,javascript中提供了本地的DOM操作功能,可能是瀏覽器的依賴。

當您向身體添加新的<javascript>元素時,它應該被自動註冊。

+0

新''元素? – MMM 2013-04-25 14:10:41