我有以下通用的Ajax响应编写器,我最近添加了一些逻辑,以便动态解析脚本对象的结果,并在我使用jQuery.globalEval()
找到它们时运行它们。
以下是代码:
//Generic Results Writter method for Ajax Calls
function writeAjaxResponse(targetId, response) {
document.getElementById(targetId).innerHTML = response;
try {
var dom = $j(response);
dom.find('script').each( function(){
$j.globalEval(this.text || this.textContent || this.innerHTML || '');
});
} catch (e) {
console.error("Error parsing for script reloads: "+e);
}
}
这个解决方案第一次被调用时效果非常好。但是,每次用户加载一些动态Ajax内容时都会调用writeAjaxResponse(targetId, response);
。不幸的是,在第一次之后,脚本不再被加载。要明确的是,在加载服务器端生成的页面之后,页面上有许多用户可以单击的链接,这些链接会调用此处理程序以进行Ajax响应。
没有发生错误,也没有写入console.error()
.. Ajax数据正常加载,只是响应中的脚本不再加载。
在调试中,$j.globalEval
仍然被调用,this.text
仍然有脚本内容,数据看起来正确,但仍然没有乐趣。
任何有人可以解决的问题都会非常感激!
为GET添加主要的ajax调用以供参考:
function doAjaxGet(targetId, getUrl, handler) {`
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
try {
handler(targetId, xmlhttp.response);
}
catch (err) {
alert("Failed calling handler, detail: " + err + " Got responseText: " + xmlhttp.responseText);
}
}
}
xmlhttp.open("GET", getUrl, true);
xmlhttp.send(null);
}