在ajax加载的页面片段中运行脚本

我的web应用程序动态加载其用户界面部分jquery.ajax。新的UI部分虽然带有脚本。我加载它们的方式:在ajax加载的页面片段中运行脚本

使用...

$.ajax({ 

url: url,

dataType: 'html',

success: function(data, textStatus, XMLHttpRequest) {

$(target_selector).html(data);

update_ui_after_load();

}

});

这几乎工程。问题是包含在页面动态部分中的脚本在将新页面片段插入到DOM之前运行。但通常这些脚本想要修改它们随附的HTML。我最好的解决方案哈克到目前为止,仅仅是延迟脚本的时候一些合理的量,让DOM插入发生,通过在setTimeout包裹他们:

window.setTimeout(function() { 

// process downloaded Fragment

}, 300);

显然,这是不可靠的,可怕的。什么是更好的方法?

回答:

我解决它通过使一个新的简单准备处理系统如下...

var ajaxOnLoad = (function() { 

var ajaxOnLoad = {};

var onLoadQueue=[];

ajaxOnLoad.onLoad= function(fn) {

onLoadQueue.push(fn);

}

ajaxOnLoad.fireOnLoad = function() {

while(onLoadQueue.length > 0) {

var fn = onLoadQueue.shift();

fn();

}

}

window.ajaxOnLoad = ajaxOnLoad;

return ajaxOnLoad;

})();

中得到

.ajax()加载页面

所以,脚本排队等待与运行

ajaxOnLoad.onLoad(function() { 

// Stuff to do after the page fragment is inserted in the main DOM

});

并且其中不插入时,update_ui_after_load()呼叫之前的代码中,运行

ajaxOnLoad.fireOnLoad(); 

更完整的解决方案可以解析页面,查找脚本标记并自动排队。但是由于我完全控制了插入的碎片,因此我更容易切换到使用ajaxOnLoad.onLoad

回答:

你是否熟悉live()函数?可能是你在这里寻找的。

http://api.jquery.com/live/

回答:

的问题是,包含在页面运行的动态部分脚本的新页面片段插入到DOM之前。但通常这些脚本想要修改它们随附的HTML。

我确信在这种情况下,唯一明智的做法是将脚本放在HTML元素之后。

其他一切很快就会变得缺憾 - 我猜你可能实现您的HTML已经被插入之后被执行自己的“准备就绪”的处理程序,但是这将是一个大量的工作来实现没有真正的收获。

回答:

使用

$(function);

将使您传递给jQuery的函数在片段在页面上内联后运行。 我发现它在 ASP.NET Ajax partial postback and jQuery problem 看完你的问题后。

以上是 在ajax加载的页面片段中运行脚本 的全部内容, 来源链接: utcz.com/qa/259915.html

回到顶部