从ajax调用(HTML和/或JS)渲染任何响应

时间:2011-05-10 22:02:55

标签: javascript html ajax

我想知道什么是最有效的方式来呈现可能来自ajax调用的任何东西。响应可以是html和/或javascript

我正在使用document.write(),因为ajax调用是同步的。现在我必须使用异步调用,所以我不能只使用document.write写入页面,我必须在调用完成后将内容添加到特定的html对象。

我试过这个

   $jQuery.ajax({
   url: "myURL.ashx",
   data: params,
   success: function(data){
        var newdiv = document.createElement('div');
        newdiv.innerHTML = data;
        document.getElementById('target').appendChild(newdiv);
   }   

但它不适用于任何返回的javascript,它很容易被破坏(这意味着;它不会呈现内容,也不会像在新标签中显示内容那样奇怪)。我只是为简单的场景而工作。

我想知道是否有更好的方法比这更好。

谢谢!

修改

例如,此代码无法按预期工作。它将内容呈现在空白页面上,而不是将内容添加到当前页面。我正在使用FF 3.6进行测试。为简单起见,我在str var上编码javscript,但该脚本是从服务器返回的。服务器返回的内容是ADS,内容是动态的,完全随机。

        var str = "<sc" + "ript language=\"JavaScript\" type=\"text/javascript\">";
        str += "document.write('<scr'+ 'ipt language=\"JavaScript\" src=\"anything.js\" type=\"text/javascript\"><\/scr' + 'ipt>');";
        str += "<\/script>";
        var newdiv = document.createElement('div');
        newdiv.innerHTML = str;
        document.getElementById('target').appendChild(newdiv);    

2 个答案:

答案 0 :(得分:1)

jQuery相当于你拥有的东西:

success: function(data){
    $('<div />')
        .append(data)
        .appendTo('#target');
}

你必须解释你的意思

  

不适用于任何JavaScript   返回

获得更好的答案。

如果<script>中有任何data个标记,如果您使用上面演示的jQuery.append函数,jQuery将在全局范围内评估它们。

更新

只需删除document.write语句即可。仅在页面仍在加载时使用document.write

<script src="anything.js" type="text/javascript"></script>

答案 1 :(得分:0)

有更好的方法来包含js文件,而不是进行加载javascript的ajax调用。我会看.getScript()