我得到一個ajax輸出成功數據。如何執行ajax輸出腳本
其中數據包含一些HTML文本和腳本。
但腳本沒有執行,我該如何執行腳本。
比方說,Ajax響應obj是
<div>something....</div><script>alert("test");</script>
上面的代碼是我的Ajax response.The格是越來越呈現,但警告不工作。
我得到一個ajax輸出成功數據。如何執行ajax輸出腳本
其中數據包含一些HTML文本和腳本。
但腳本沒有執行,我該如何執行腳本。
比方說,Ajax響應obj是
<div>something....</div><script>alert("test");</script>
上面的代碼是我的Ajax response.The格是越來越呈現,但警告不工作。
不知道,如果你使用的是圖書館,但與原型我必須設置
evalScripts: true
之前的JavaScript將EVAL-ED。在這裏看到更多的信息:
http://www.sergiopereira.com/articles/prototype.js.html#UsingAjaxRequest
使用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);
可能有更好的方法,但這是簡單的,對我的工作,所以我就用這個。後來,當這個項目投入生產時,我可能會回去清理它,但那是在我完成所有工作之後。
如果您從AJAX調用中檢索JSON格式的結果,則可以使用eval來執行javascript。
假設,如果結果JSON是這樣
var res = '{"Data": "<something>",
"script": "alert(something)"}';
var out = eval("(" + res + ")");
var data = out.data;
eval(out.script);
這可能是一個壞主意。我可以很容易地發送我自己的JSON,可能包含惡意的JavaScript,它會執行沒有問題... – SpaDusA 2009-12-11 19:25:48
@SpaDusA我不會推薦它給初學者程序員,但這就是如何處理JSON。使用HTTPS可以提高安全性,但是如果您的所有訪問都在您的服務器上,那麼您可以控制發送給客戶端的腳本。 – 2012-07-18 22:11:09
形成不使用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);
}
}
}
}
有趣的是,我使用jQuery和使用HTML()函數是足以讓要執行的JavaScript。所以或多或少我沒有什麼特別的事情要做。
有一個簡化版本:
var myform = $('form#form-id');
$.post(myform.attr('action'), myform.serialize(), function(response) {
$('#some-id').html(response.message);
}
在我的情況下,代碼踢自動所以我並不需要任何其它這裏提出的解決方案。
直到你發佈了一些代碼,你才能得到答案,所以我們確切地知道你在處理什麼。 – 2009-09-30 03:40:25
您需要添加更多信息。你能給我們一個返回的文本/腳本的例子嗎?你目前如何試圖「執行腳本」? – Seph 2009-09-30 03:47:26
對不起,你將不得不包含更多的信息。 – 2009-09-30 04:11:07