我得到一个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