如何执行ajax输出脚本

时间:2009-09-30 03:38:58

标签: javascript ajax

我正在获取ajax输出成功数据。

数据包含一些html文本和脚本。

但脚本没有执行,我该如何执行脚本。

让我们说Ajax响应obj是

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

上面的代码是我的Ajax响应.div正在渲染,但警报无效。

5 个答案:

答案 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);

可能有更好的方法,但这很简单,对我有用,所以我只是用它。后来,当项目投入生产时,我可能会回去清理它,但那是在我完成所有工作之后。