2010-01-28 124 views
5

來自我的web應用程序的XML響應既有要添加到頁面的HTML,也有一些腳本需要運行。jQuery:在ajax響應中評估腳本

我想從我的web應用程序像發回XML:

<?xml version="1.0"?> 
<doc> 
    <html-to-insert> 
    <![CDATA[<p>add me to the page</p>]]> 
    </html-to-insert> 
    <script> 
    <![CDATA[ alert('execute me'); ]]> 
    </script> 
</doc> 

我現在正在做的是搶購了<html-to-insert><script> CDATA,插入到HTML頁面和eval'ing <script>

我在尋找批評我的方法。任何人的建議?

回答

2

你寧願發送JSON,它的方式更容易解釋。例如:

// Suppose your response is a string: 
// { html: "<p>add me to the page</p>, script:"alert('execute me');" } 
var obj = eval("(" + response + ")") ; 
eval(obj.script) ; 
0

JSON會比XML imho更適合此目的。

8

可以使用jQuery的庫使XML請求到你的後臺,也解析它

$(document).ready(function() 
{ 
    $.ajax({ 
    type: "GET", 
    url: "your/url/that/returns/xml", 
    dataType: "xml", 
    success: function (xml) { 
     // xml contains the returned xml from the backend 

     $("body").append($(xml).find("html-to-insert").eq(0)); 
     eval($(xml).find("script").text()); 
    } 
    }); 
}); 

你可以找到更多關於jQuery的herehere

我沒有測試過它,但它應該按照this article工作。

2

This是我找到的最佳答案。工作完美:


element.innerHTML = xmlhttp.responseText; 
var scriptElements = element.getElementsByTagName('SCRIPT'); 
for (i = 0; i < scriptElements.length; i ++) { 
    var scriptElement = document.createElement('SCRIPT'); 
    scriptElement.type = 'text/javascript'; 
    if (!scriptElements[i].src) { 
     scriptElement.innerHTML = scriptElements[i].innerHTML; 
    } else { 
     scriptElement.src = scriptElements[i].src; 
    } 
    document.head.appendChild(scriptElement); 
} 

感謝Joseph the Dreamer。原始答案here

編輯:

澄清:

  1. 腳本只運行裏面script標籤
  2. 添加文檔加載之後的腳本,只有當它被添加到head標籤
生效

感謝Deniz Porsuk的評論,以改善答案

+0

如果在div標籤內追加Child腳本。它們不會被瀏覽器執行。腳本應該附加「腳本」標籤。 – 2015-04-30 09:07:19

+0

你在說哪個div?我使用腳本標籤'var scriptElement = document.createElement('SCRIPT');'。請解釋你的評論。 – IgniteCoders 2015-06-08 15:05:02

+0

是的,這是真實的方式。但是,如果你在div中創建你的腳本,如var divElement = document.createElement('div');並從scriptElement = document.createElement('SCRIPT'); divElement.innerHTML = scriptElement;腳本不會被瀏覽器執行。 – 2015-06-09 07:40:55