我正在获取ajax输出成功数据。
数据包含一些html文本和脚本。
但脚本没有执行,我该如何执行脚本。
让我们说Ajax响应obj是
<div>something....</div><script>alert("test");</script>
上面的代码是我的Ajax响应.div正在渲染,但警报无效。
答案 0 :(得分:2)
如果要从AJAX调用中检索JSON格式的结果,可以使用 eval 来执行javascript。
假设,如果结果json像这样形成
var res = '{"Data": "<something>",
"script": "alert(something)"}';
var out = eval("(" + res + ")");
var data = out.data;
eval(out.script);
答案 1 :(得分: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);
}
}
}
}
答案 2 :(得分:1)
有趣的是,我使用jQuery并使用html()函数足以让JavaScript执行。所以我或多或少没有什么特别的事情要做。
有一个简化版本:
var myform = $('form#form-id');
$.post(myform.attr('action'), myform.serialize(), function(response) {
$('#some-id').html(response.message);
}
在我的情况下,代码自动启动,因此我不需要此处提出的任何其他解决方案。
答案 3 :(得分:0)
不确定您是否使用库,但使用Prototype我必须设置
evalScripts: true
在评估JavaScript之前。有关详细信息,请参阅此处:
http://www.sergiopereira.com/articles/prototype.js.html#UsingAjaxRequest
答案 4 :(得分:0)
在这里使用jQuery是一段简单的代码:
$.ajax({
type: "POST",
url: "getData.asmx/HelloWorld",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(result) {
alert(result);
}
});
但是,为了实际使用变量结果的结果我最终使用了来自http://www.json.org/js.html的javascript库,我做了:
success: function(result) {
var myData = JSON.parse(result.d);
可能有更好的方法,但这很简单,对我有用,所以我只是用它。后来,当项目投入生产时,我可能会回去清理它,但那是在我完成所有工作之后。