我想知道什么是最有效的方式来呈现可能来自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);
答案 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()