2009-09-30 136 views
2

我得到一個ajax輸出成功數據。如何執行ajax輸出腳本

其中數據包含一些HTML文本和腳本。

但腳本沒有執行,我該如何執行腳本。

比方說,Ajax響應obj是

<div>something....</div><script>alert("test");</script> 

上面的代碼是我的Ajax response.The格是越來越呈現,但警告不工作。

+0

直到你發佈了一些代碼,你才能得到答案,所以我們確切地知道你在處理什麼。 – 2009-09-30 03:40:25

+0

您需要添加更多信息。你能給我們一個返回的文本/腳本的例子嗎?你目前如何試圖「執行腳本」? – Seph 2009-09-30 03:47:26

+0

對不起,你將不得不包含更多的信息。 – 2009-09-30 04:11:07

回答

0

使用jQuery這裏是一個簡單的代碼位:

$.ajax({ 
    type: "POST", 
    url: "getData.asmx/HelloWorld", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(result) { 
     alert(result); 
    } 
}); 

但是,實際使用可變結果我結束了使用JavaScript庫的結果從http://www.json.org/js.html,我所做的:

success: function(result) { 
    var myData = JSON.parse(result.d); 

可能有更好的方法,但這是簡單的,對我的工作,所以我就用這個。後來,當這個項目投入生產時,我可能會回去清理它,但那是在我完成所有工作之後。

2

如果您從AJAX調用中檢索JSON格式的結果,則可以使用eval來執行javascript。

假設,如果結果JSON是這樣

var res = '{"Data": "<something>", 
       "script": "alert(something)"}'; 

    var out = eval("(" + res + ")"); 
    var data = out.data; 
    eval(out.script); 
+0

這可能是一個壞主意。我可以很容易地發送我自己的JSON,可能包含惡意的JavaScript,它會執行沒有問題... – SpaDusA 2009-12-11 19:25:48

+0

@SpaDusA我不會推薦它給初學者程序員,但這就是如何處理JSON。使用HTTPS可以提高安全性,但是如果您的所有訪問都在您的服務器上,那麼您可以控制發送給客戶端的腳本。 – 2012-07-18 22:11:09

1

形成不使用JSON或jQuery的,或任何其他庫,你的AJAX調用返回一些HTML和/或JavaScript在其中添加假設到現有文檔(例如使用innerHTML),使用AJAX返回的任何javascript都不會在瀏覽器中執行 - 除了HTML中元素的事件外。

因此,如果您的AJAX調用返回<input type="button" value="Click me" onclick="alert('hello');" />,js警報將正常工作,但如果您的AJAX調用返回<script type="text/javascript">alert('hello');</script>則不會執行。在這種情況下,你將不得不解析結果提取的JavaScript並執行它,使用功能,像這樣:

function extract_and_execute_js(output_to_parse) 
{  
    if(output_to_parse != '')  
    {  
     var script = ""; 
     output_to_parse = output_to_parse.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){if (output_to_parse !== null) script += arguments[1] + '\n';return '';}); 
     if(script) 
     { 
      if (window.execScript) 
      { 
       window.execScript(script); 
      } 
      else 
      { 
       window.setTimeout(script, 0); 
      } 
     } 
    } 
} 
1

有趣的是,我使用jQuery和使用HTML()函數是足以讓要執行的JavaScript。所以或多或少我沒有什麼特別的事情要做。

有一個簡化版本:

var myform = $('form#form-id'); 
$.post(myform.attr('action'), myform.serialize(), function(response) { 
    $('#some-id').html(response.message); 
} 

在我的情況下,代碼踢自動所以我並不需要任何其它這裏提出的解決方案。