2009-09-30 100 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); 
} 

在我的情况下,代码踢自动所以我并不需要任何其它这里提出的解决方案。