多个页面的HTML代码,window_在多个页面使用同一个HTML片段《续》,1. HTML页面: 复制代码 代码如 - phpStudy...

在多个页面使用同一个HTML片段《续》

1. HTML页面:

复制代码 代码如下:

$(function() {

$("#clickToInsert").click(function() {

$.get("service.ashx?file=pages2_1.txt", function(data) {

$("#placeholder").html(data);

}, "text");

});

});

2. service.ashx 后台代码:

复制代码 代码如下:

public void ProcessRequest(HttpContext context)

{

string filePath = context.Request["file"].ToString();

string fileContent = String.Empty;

using (StreamReader sr = new StreamReader(context.Server.MapPath(filePath)))

{

fileContent = sr.ReadToEnd();

}

context.Response.ContentType = "text/plain";

context.Response.Write(fileContent);

}

3. pages2_1.txt 文件:

复制代码 代码如下:

$(function() {

var parent = $("#complex_page_segment");

$(".previous", parent).click(function() {

$(".content", parent).html("Previous Page Content");

});

$(".next", parent).click(function() {

$(".content", parent).html("Next Page Content");

});

});

Page Content

将HTML片段中的JavaScript提取为一个文件

这也是自然而然就想到的,特别是HTML片段中JavaScript代码比较多的情况下,

提取为一个JS文件,让浏览器帮忙缓存不失为一种好方法。

1. 重新定义pages2_2.txt

复制代码 代码如下:

$(function() {

setup();

});

Page Content

2. pages2_2.js

复制代码 代码如下:

function setup() {

var parent = $("#complex_page_segment");

$(".previous", parent).click(function() {

$(".content", parent).html("Previous Page Content");

});

$(".next", parent).click(function() {

$(".content", parent).html("Next Page Content");

});

}

3. 运行,居然报错!

问题分析

错误信息是 setup 这个函数没有定义,但是从Firebug中我们明显看到pages2_2.js的确被加载了。

那个极有可能是在 pages2_2.js 加载之前就调用了 setup 这个函数。

但是我们的setup 函数调用是放在jQuery的 $(function(){ }) 之中的,也就是在页面加载完毕才调用的。

其实现在问题已经很明显了,在AJAX返回页面片段的时候,整个页面是已经加载完成了,也就是DOM Ready。

所以在页面片段中:

复制代码 代码如下:

$(function() {

setup();

});

和下面直接调用是等价的:

复制代码 代码如下:

setup();

解决问题

对于这个问题,我们有三种解决办法。

1. 将外部JS文件在页面中加载,而不是在AJAX返回的HTML片段。

2. 我们可以通过JavaScript先加载外部JS,再加载纯粹的HTML片段。

看一下pages2_3.htm的实现:

复制代码 代码如下:

$(function() {

$("#clickToInsert").click(function() {

$.getScript("pages2_2.js", function() {

$.get("service.ashx?file=pages2_3.txt", function(data) {

$("#placeholder").html(data);

}, "text");

});

});

});

3. 利用JavaScript在页面上是顺序加载的特性,将HTML片段中外部JS引用放在最上面

pages2_4.htm:

复制代码 代码如下:

$(function() {

$("#clickToInsert").click(function() {

$.get("service.ashx?file=pages2_4.txt", function(data) {

$("#placeholder").html(data);

}, "text");

});

});

pages2_4.txt:

复制代码 代码如下:

setup();

Page Content

可能你会觉得第三种方法没有必要,但是如果你碰到这样的需求,你就知道第三种方法的重要性了。

不要在每个页面都加载这个JS文件

调用者不知道一个HTML片段关联哪些JS文件

============================================================

关于JS的顺序执行特性

可能有人对这个特性并不是很清楚,我就通过一个例子来说明。

复制代码 代码如下:

console.log("after js2:" + new Date().toLocaleTimeString());

js1.js:

复制代码 代码如下:

console.log("start load js1:" + new Date().toLocaleTimeString());

// 中间是很长很长的一段JavaScript,有12M之多

console.log("end load js2:" + new Date().toLocaleTimeString());

js2.js:

复制代码 代码如下:

console.log("load js2:" + new Date().toLocaleTimeString());

我们来看下Firebug的记录:

可以看到,虽然js2.js更早的被加载,但是还是js1.js执行结束之后,才开始执行js2.js。

源代码下载相关阅读:

the sourcesafe database has been locked by the administrator之解决方法

JavaScript入门教程(3) js面向对象

域控制器活动目录之备份与恢复二(组图)

PHP中如何判断AJAX提交的数据

改变javascript函数内部this指针指向的三种方法

IE中显示min-width效果的解决方案

GTK+CSS主题引擎0.1版发布

讲解Oracle数据库LogMiner工具的使用方法

php的ajax框架xajax入门与试用介绍

asp遍历站点所有文件夹的代码

根据邮箱的域名跳转到相应的登录页面的代码

Meta标签的X-UA-Compatible

php中的MVC模式运用技巧

Dedecms5.1后台添加HTML更新-更新栏目缓存方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值