多次调用jQuery.globalEval()

时间:2018-04-06 01:22:10

标签: javascript jquery ajax

我有以下通用的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);
}

0 个答案:

没有答案