9
回答
关于Jquery ui tabs插件的ajax调用
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
Jquery ui tabs的插件使用时,在用ajax方法调用其他的jsp页面在tab上显示时发现,必须要在主页面上把被调用页面里使用到的所有js全部加载才能正常使用(比如,main.jsp里面使用tabs插件调用ajax.jsp页面,但ajax.jsp页面里引用了ajax.js文件,这时必须要在main.jsp里也引入ajax.js文件才能正常工作)有没有高人可以指点下小弟,如何不用在主页面上加载就能实现?多谢了。
举报
元来元去
发帖于7年前 9回/3K+阅
共有9个答案 最后回答: 7年前

很简单,你调用的那个页面加载这个ajax.js的文件就好了,记得ajax调用的时候允许执行js。

还可以动态加载,比如在调用js的时候,才在主页面中插入这个<script src=ajax.js>的标签也可以。

更有甚者,你还可以做成一个整体加载库。完全看你喜欢啦。

引用来自#2楼“曾建凯”的帖子

很简单,你调用的那个页面加载这个ajax.js的文件就好了,记得ajax调用的时候允许执行js。

还可以动态加载,比如在调用js的时候,才在主页面中插入这个<script src=ajax.js>的标签也可以。

更有甚者,你还可以做成一个整体加载库。完全看你喜欢啦。

呃 我用的是jquery-ui-tabs插件 里面的方法是封闭好的 怎么样才能在ajax调用的时候允许执行js呢?

引用来自#4楼“元凯”的帖子

引用来自#2楼“曾建凯”的帖子

很简单,你调用的那个页面加载这个ajax.js的文件就好了,记得ajax调用的时候允许执行js。

还可以动态加载,比如在调用js的时候,才在主页面中插入这个<script src=ajax.js>的标签也可以。

更有甚者,你还可以做成一个整体加载库。完全看你喜欢啦。

呃 我用的是jquery-ui-tabs插件 里面的方法是封闭好的 怎么样才能在ajax调用的时候允许执行js呢?

抱歉,我不太了解jQuery的Ajax的参数,这个也是我最无法接受的。

Mootools的思路如下:

new Request({

  url: 'xxx',

  evalScripts: true,

  evalRespons: true

}).post();

即可。jQuery应该也有类似的机制吧,不然他的ajax类可以丢掉别要了。

以下是MooTools代码中封装的执行页面js的代码的函数,难道jQuery没有吗?

function $exec(text){
	if (!text) return text;
	if (window.execScript){
		window.execScript(text);
	} else {
		var script = document.createElement('script');
		script.setAttribute('type', 'text/javascript');
		script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
		document.head.appendChild(script);
		document.head.removeChild(script);
	}
	return text;
};

一般的用法如下:

// response为ajax请求返回的内容
var script = null;
// 从response中分离出script标签的内容出来
// 这是MooTools基于String扩展,jQuery应该有类似的吧?
response.stripScripts(function(s) {script = s;});
// 插入html
$(target).set('html', response);
// 执行脚本
$exec(script);

上述代码其实是我从MooTools的源代码中抽离出来的,新版本的MooTools有更好的做法。

恩,对了,我记得看jQuery的ajax封装,一塌糊涂,算了,不说了。

记得jQuery刚发布1.2.0的时候,那时候朋友强烈推荐,我就用了jQuery,结果发现他的ajax是不支持evalScripts设定的,当时吐血N斗,无语。。。。立刻决定放弃jQuery。

Jquery ui tabs插件我还真没用过,你看看用这个引入的ajax.jsp在主页面是以什么形式存在的?ifream?还是直接嵌套在当前页面内的子内容?

如果是ifream应该不会出现这样情况,如果是子内容,可以考虑用下面的方法动态引入,这样不用的时候就不引了。

$.getScript("ajax.js");

这些问题可能没有一下解决的方法,需要按照思路一步一步排查的。

顶部