通常Ajax执行时或执行后不会请求整个页面里面的js,除非把js写到请求页面之中,那么有些插件或者自身需要js脚本来实现的功能就可能在ajax执行之后不起作用,这时需要重新挂载这些js脚本。本文介绍的方法是在你没有办法将这个插件功能的执行函数写入ajax中才使用的。

比如:多说、独立的ajax评论、某些音乐播放插件、图片灯箱、代码高亮等等... 这些WP插件的功能都需要自身的js文件或脚本代码来实现。
拿多说来举例,启用多说插件之后,多说会在你的head标签内插入以下两种形式的脚本:

多说脚本

方法一

针对简单的脚本代码。上图中第一种包裹在script标签里面的代码就是多说加载的脚本代码,我们可以使用eval()函数来执行这里面的代码,并将eval放进ajax执行成功后的参数内。

eval($('head script')[0].html());

意思很简单,获取head标签内第一个script标签的内容代码,并用eval函数来执行这部分代码。把它丢到ajax执行成功后的参数内,多说就可以在ajax后加载了。

方法二

针对script标签引用的js地址。上图中第二种采用地址形式引用的js,我们可以用ajax方法中的jQuery.getScript()方法来执行。

jQuery.getScript('http://static.duoshuo.com/embed.js');
全局ajax缓存

但凡与ajax冲突的一些功能都可以采用以上两种方法解决。如果你不想每次都加载,可以在第一次加载后进行缓存,采用ajax的ajaxSetup()方法。jQuery.ajaxSetup() 方法设置全局 AJAX 默认选项。缓存采用

jQuery.ajaxSteup({cache:true});

特别说明

有的时候某些js功能库带有相应的执行函数,比如Slimbox2.js
执行函数一般是jQuery("#main a[rel=lightbox]").slimbox(); , 这时不能将“jQuery”改成“$”,否则会无法执行。这些细节要注意!