??xml version="1.0" encoding="utf-8" standalone="yes"?> Ajax定义?#8220;Asynchronous JavaScript + XML”的简Uͼ也就是异步的JavaScript和XML处理。从原理上看Q主要是Ajax可以通过调用HttpRequest实现与服务器的异步通讯Qƈ最l在|页中实C富友好的用户界面 功能Q在textbox中输入内容,动态从数据库模p查询显C到下拉框中Q以供选择 Ajax的跨域访问问题是现有的Ajax开发h员比较常遇到的问题?br> IE对于跨域讉K的处理是Q弹告框Q提醒用戗如果用户将该网站纳入可信Q|站Q或者调低安全别,那么q个问题IE׃会在提醒你?nbsp;
<script language=JavaScript>
var imgUrl=new Array();
var imgLink=new Array();
var adNum=0;
imgUrl[1]="images/default/toplist/1.jpg";
imgLink[1]="/z/chn-iran/photo/3712/index.shtml";
imgUrl[2]="images/default/toplist/2.jpg";
imgLink[2]="/z/chn-iran/photo/3712/index.shtml";
imgUrl[3]="images/default/toplist/3.jpg";
imgLink[3]="/z/chn-iran/photo/3672/";
imgUrl[4]="images/default/toplist/4.jpg";
imgLink[4]="/z/chn-iran/photo/3672/";
imgUrl[5]="images/default/toplist/5.jpg";
imgLink[5]="/z/chn-iran/photo/3672/";
var imgPre=new Array();
var j=0;
for (i=1;i<=5;i++) {
if( (imgUrl[i]!="") && (imgLink[i]!="") ) {
j++;
} else {
break;
}
}
function playTran(){
if (document.all)
imgInit.filters.revealTrans.play();
}
var key=0;
function nextAd(){
if(adNum<j)adNum++ ;
else adNum=1;
if( key==0 ){
key=1;
} else if (document.all){
imgInit.filters.revealTrans.Transition=6;
imgInit.filters.revealTrans.apply();
playTran();
}
document.images.imgInit.src=imgUrl[adNum];
theTimer=setTimeout("nextAd()", 6000);
}
function goUrl(){
jumpUrl=imgLink[adNum];
jumpTarget='_blank';
if (jumpUrl != ''){
if (jumpTarget != '')
window.open(jumpUrl,jumpTarget);
else
location.href=jumpUrl;
}
}
</script>
<a href="javascript:goUrl()"><img style="FILTER: revealTrans(duration=2,transition=20);border-color:black;color:#000000" src="javascript:nextAd()" width=258 height=230 border=1 class=b1 name=imgInit></a>
<!-- 动态图l束 -->
]]>
<SCRIPT type=text/javascript>
var focus_width=290
var focus_height=170
var text_height=20
var swf_height = focus_height+text_height
var pics=‘1.jpg|2.jpg|3.jsp|4.jpg|5.jpg|‘;
var links='index.php|http://auto.qq.com/a/20051029/000009.htm|';
var texts='靛蓝走过花季的梦q|忧郁因ؓ思念的凝滞|偶尔的童心盛开烂O|更多时候一个h独处|一直在旁的亲密伴G';
document.write('<object ID="focus_flash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+ focus_width +'" height="'+ swf_height +'">');
document.write('<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="http://auto.qq.com/flash/playswf.swf"><param name="quality" value="high"><param name="bgcolor" value="#FFFFFF">');
document.write('<param name="menu" value="false"><param name=wmode value="opaque">');
document.write('<param name="FlashVars" value="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'">');
document.write('<embed ID="focus_flash" src="playswf.swf" wmode="opaque" FlashVars="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'" menu="false" bgcolor="#C5C5C5" quality="high" width="'+ focus_width +'" height="'+ swf_height +'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
document.write('</object>');
//-->
</SCRIPT>
下面是falsh文gQ?object xcodebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" height="200" width="200" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
一些好的下载链接:http://blog.csdn.net/suilam/archive/2005/12/15/553280.aspx
lash轮播q告
http://bbs.blueidea.com/viewthread.php?tid=2374504&page=
[下蝲]l典代码一ơ全下蝲Q?flashqȝ片,囄qȝ片都有)
http://bbs.powereasy.net/dispbbs.asp?boardID=28&ID=290178&page=10
韩国flash焦点大图q告代码 / / 2007-06-24
http://www.zcool.com.cn/jscode/ggcode/page_2.html
]]>
function createXMLHttpRequest() {
request = false;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
if(request.overrideMimeType) {
request.overrideMimeType('text/xml');
}
} else if(window.ActiveXObject) {
var versions =
['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
for(var i=0; i<versions.length; i++) {
try {
request = new ActiveXObject(versions[i]);
if(request) {
return request;
}
} catch(e) {
//alert(e.message);
}
}
}
alert("1");
if (!request) { // 异常Q创建对象实例失?br> window.alert("不能创徏XMLHttpRequest对象实例.");
return false;
}
return request;
}
function ajaxpost(targetUrl,sendString,resultHandle){
request = createXMLHttpRequest();
request.onreadystatechange = resultHandle;
request.open("post",targetUrl);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.setRequestHeader("Content-length", sendString.length);
request.setRequestHeader("Connection","close");
request.send(sendString);
}
function ajaxget(targetUrl,resultHandle){
request = createXMLHttpRequest();
request.onreadystatechange = resultHandle;
request.open("get",targetUrl);
request.send(null);
}
//处理l果
function handle(){
if (request.readyState == 4) {
if (request.status == 200) {
//alert(request.responseText);
var result = request.responseText;
document.getElementById('welcome').style.display="";
document.getElementById('user').style.display="";
document.getElementById('loginform').style.display="none";
document.getElementById('user').innerHTML = result;
} else {
alert('There was a problem with the request.');
}
}
}
//调用
function check(){
var tartgeUrl="login.php";
var params ="username=" + encodeURI( document.getElementById("username").value ) +"&password=" + encodeURI( document.getElementById("password").value );
alert("start"+params);
ajaxpost(tartgeUrl,params,handle);
}
]]>
DHTML(Dynamic
HTML)是W3Cl织提出的一U新的规范,它对原有的HTML做了许多扩充Qƈl合JavascriptQ得静态的HTML面产生了许多动态效果,
例如菜单的展开和收P面元素的外观动态改变等。IE 4.0以上QNavigator
4.0以上的版本都支持q个标准。但是,不同的浏览器厂家对它都做了不同程度的扩充。以最行IE的和NSZQIE的实现更接近于W3C的方案,?
NSQ说实话Q与W3C的方案差异很大,而且q没有完全实玎ͼ甚至可以说是另一套方案。笔者在初识DHTMLӞ按照书上讲的~写了几个小E序Q在IE?
一试就通,而在NS上可以说费尽了周折才逐渐扑ֈ解决Ҏ。由于市面上很少有讲qNS的DHTML实现Ҏ的书(大概NS׃的实CW合标准)Q而真?
的商业网站至应同时支持IE和NSq两U主要的览器,我愿意把我的一些心得写出来与大家共享,使大家不必再走我走过的弯路。对于二者的实现相同的部
分,本文作一略介l,您若有兴可参考有关书c或|上资源?
DHTML实际上由三两部分l成QCSS(Cascade Style SheetQ联样式表)Q层(Layer)和Javascript?
所谓CSSQ概念上cM于C++中的c,在类定义中指明元素的外观样式Q如字体Q颜Ԍ大小{等Q页面中的Q何一个HTML元素如被指定属于
q个c,p动拥有该cȝҎ;q可以ؓ某种HTML元素定义样式Q这样页面中的所有这U元素都有了同样的外观。如果将q样的样式定义存在一个单独的.
css文g?pC++那样类定义存在
.h文g?Q再在页面中其包含q来Q则一个网站的所有页面就有了同样的外观。IE和NS对CSS的实现基本相同,在此׃再详l介l了?
两者的差异主要体现在层的实C。所谓层Q就是页面上的一块区域,其中可以包含M的HTML元素Q通过改变层的属性,光的元素可以跟着?
玎ͼ消失Q更改,Ud{?
在IE中,层依?lt;DIV></DIV>?lt;SPAN></SPAN>来实玎ͼ两者基本相同,通常
<DIV>用于较大的层Q?lt;SPAN>用于较小的层Qƈ?lt;DIV>在实现的层后面加上一个回车换行,?lt;
SPAN>不加。它的语法如?二者相?Q?
<div id=layername style="style definition">Layer content</div> ?
<div id=layername class="classname">Layer content</div>
其中style definition是一l有分号隔开的样式定义,常用的有以下几种Q?
positionQ其值可以ؓabsolute和relativeQ所谓absolute(l对定位)Q就是层的内容不必按照出现的先后ơ序
在浏览器上依ơ排列,而是可以像素为单位定位到览器用户区域的L位置Q而relative(相对定位)则是层按照相ȝ内容依次排列?
leftQtopQwidthQheightQ指层的左上角坐标以及它的宽度和高度?
z-indexQ由于层可以被放|在面的Q何位|,当它与其它内定w合时Qz-index值大的显C在上面Q所有层的z-indexgؓ
1。但是在NS中,所有的表单元素(文本框,列表框,按钮{?Q只要是可见的就无法被遮住,而无论z-index值是多少。因此在设计面Ӟ要注意不?
使动态出现或隐藏的元?例如弹出式菜?的位|上攄表单元素?
VisibilityQ指明层是否可见Q通过在程序中动态改变这个|可以实现层的出现和消失,比如下拉菜单p依靠它来实现。它的三个候?
gؓQinheritQ可见性与父元素的可见性相同;visibleQ可?在NS中是show)QhiddenQ不可见(在NS中是hide)?
NS同样支持q两个标讎ͼ但是支持得很不好Q经常出C些莫名其妙的错误Q我惌可能是出于策略上的考虑Q而不见得是NS的品质量不好?
NS引入了另两个标记Q?lt;layer>?lt;ilayer>Q?lt;layer>用于l对定位Q?lt;
ilayer>用于相对定位Q因此在q两个标记的样式定义中没有position属性?
两个览器对层的不同实现体现在以下几点:
1.
层的引用。在IE中,面上的每个可编E元?不仅是层Q还包括其它M指明了ID值的元素Q详见下?都是document.all集合的一;而在
NS中,面中每个层Q无论是用上面四个标C的哪个定义的Q也无论是绝Ҏ是相对定位,都是document.layers集合的一V因此,若想引用
名ؓlayer1的层Q应以如下语法:
IEQdocument.all["layer1"]或document.all.layer1
NSQdocument.layers["layer1"]或document.layers.layer1
2.
层的坐标和大。在IE中,每个涉及层的外观的属性,如位|,大小Q颜色等Q都是层的style属性集合的以一,如层的左上角x坐标?
document.all.layer1.style.pixelLeftQy坐标?
document.all.layer1.style.pixelTopQ宽度ؓ
document.all.layer1.style.pixelWidthQ高度ؓ
document.all.layer1.style.pixelHeight。还有几l属性如scrollxxxQoffsetxxxQ?
clientxxxQ其中xxx为LeftQTopQWidthQHeight
Q分别描q层的滚动,位移Q客户区{属性,详见MSDN中关于坐标的描述。而在NS中,每个层都有一个clip属性集QxQyQwidthQheight
是这个集的集合元素?
另外QIE中所有元素拥有同一个坐标系Q无论它位于层外或层内;在NS中,每个层都有一个独立的坐标pR?
3. 层的内容。IE中的层包含innerHTML和outerHTML属?׃q描述层的外观Q所以它们不是style属性集的元素,而是层的属?Q其含义如下Q?
innerHTMLQ层中的HTML代码Q但是不包括层的定义?
outerHTMLQ层中的HTML代码Q且包括层的定义?
改变q些属性值就可以改变层的内容Q如下语句改变层layer1的内容ؓ加粗的字W串"layer1"Q?
document.all.layer1.innerHTML=”<b>layer1</b>”
Q而在NS中,每一个document.layers集合中的元素Q即一个层Q都NS被视Z个独立的H口Q有独立document属性,p
Javascript中的document属性一P通过调用document.write函数Q可以动态改变层的内宏V上例在NS中应修改为:
document.layers.layer1.document.open();
doucment.layers.layer1.write("<div><b>layer1</b></div>");
document.layers.layer1.document.close;
同样Q对于层中的其它可编E元素,例如图象Q其引用语法如下Q?
document.layers.layer1.document.images[imgname]Q而如果该图象位于层的外面Q其语法应ؓ
document.images[imgname]Q而在IE中,无论图象位于层内或层外,其语法都是后者?
Javascript是Netscape公司首先提出的一U客L~程的脚本语aQ随后有扩展到服务器端。它的语法和概念都类gC++Q但
是没有C++那样严格。IE同样支持客户端Javascript(微Yq推ZcM的,功能更强大的VbscriptQ但是NS却不支持)。两U浏览器?
Javascript的基本实现是一LQ但是又都对它做了许多不同的扩展Q而在DHTML~程中,很多情况下都需要用到这些扩展。由于此时已l没有标?
可遵循,二者已l看不出有相同之处。例如,览器的客户区的宽度Q在IE中是document.body.clientWidthQ在NS中是
window.innerWidthQ再比如你想知道用户按浏览器的滚动条滚动了多像素,在IE中是document.body.scrollTopQ?
在NS中是window.pageYOffset。在q种情况下,你只能查阅二者的文档。IE的Javascript文档包含在MSDN中,也可以到微Y
的站点上单独下蝲。NS的Javascript文档可以?
http://developer.netscape.com上下载,那里也能得到NS的DHTML文档?
NS没有实现的功能?
1.IE中,面中的M元素都是可编E的Q只要赋予它ID属性,其语法如下:
<div id=itemid>content</div>?lt;span id=itemid>content</span>
而在NS中,除非元素位于层中Q否则无法对它编E?
2.IE中增M元素的渐?Transition)和o?Filter)效果QNS中没有?
3.IE中支持客L的数据绑?Data bind)Q即面中的某个元素(例如表格中的一个格)可以与服务器端的数据库的某个字段l定Q在数据内容不变的情况下Q可以不必再ơ访问数据库而改变页面的形式(例如按某个字D重新排?。NS同样没有实现q种Ҏ?
以上列D了二者的如此之多的差别,那我们如何编写跨览器的DHTML面呢?一U方法是~写两个独立的页面,而在入口文g中根据浏览器的不同而重定向C同的面Q如Q?
<HTML><BODY>
<Script Language="Javascript">
isNS=(navigator.appName=="Netscape");
if (isNS)
window.location="ns.html";
else
window.location="ie.html";
</Script>
</BODY></HTML>
q种Ҏ单,面整洁Q缺Ҏ有很大冗余,毕竟一个页面中E序是少量的Q大部分静态内容在两个览器中q没有区别,一旦静态的内容发生改变必须在两个页面中一h改,而且当包含DHTML的页面增多时Q每一个页面都需要三个页面来实现Q增大了l护的负担?
另一U方法是在同一个页面中集成两个览器的代码。在每一个实现特定功能的函数中都Ҏ览器的不同分别写代码,如:
<HTML><BODY>
<Script Language="Javascript">
isNS=(navigator.appName=="Netscape");
function fun1(){
if (isNS)
//NS codes here
else
//IE codes here
}
</Script>
</BODY></HTML>
对于HTML代码也不同的部分Q可以利用Javascript函数 document.writeln()来实玎ͼ例如对于层的定义Q可以如下实玎ͼ
<Script Language="Javascript">
if(isNS)
document.writeln("<layer id=\"layer1\" left=20 top=30 width=40 height=50 z-index=2>");
else
document.writeln("<div id=\"layer1\" style=\"position:absolute;left:20;top:30;width:40;height:50;z-index:2\">");
</Script>
Layer content here
<Script Language="Javascript">
if(isNS)
document.writeln("</layer>");
else
document.writeln("</div>");
</Script>
q种实现Ҏl护单,~点是失M面~辑器所见即所得的Ҏ?因ؓ只有到运行时才能层的定义写入浏览器Q在~辑阶段它们只是?
JavascriptE序)Q调整层的坐标和大小都比较困难。在实际~程中可以先按一U浏览器的定义写Q待调整完毕后再它转成另一U定义。但ȝ来说Q?
q种办法适合对HTML标准比较熟悉的开发h员?
]]>
序言Q?
随着互联|的普及和网制作技术的发展Q越来越多的|友开始制作自q|站。做为网站最重要的部分—导航菜单也出现了各式各L设计和制作方法?
其中下拉式导航菜单已l成为多栏目大信息量|站的首选导航方式。那么,在下面我简单介l一下众多下拉菜单制作方法中完全使用JS自动生成?#8220;自适应分L
率可扩展二层JS下拉菜单”的工作原理和使用Ҏ?
1?S下拉菜单原理
下拉菜单实际上就是在开始的时候显CZU或者说是主菜单Q图一Q。当触发条gQ例如:鼠标UdC面时Q显C次U菜单(图二Q?
图一
图二
那么如何实现q样的效果呢。其实很单。所有的下拉菜单都是通过囑ֱ的显隐来实现的。在文g下蝲的时候,其实主菜单和ơ菜单都以lŞ成或者说?
载到了客L也就是你的机器里。只是次U菜单被隐藏h。隐藏的Ҏ一般是使用javascript
配合css控制ơ菜单的图层的属性visibility为隐?
。所以在开始的使用你是看不见次U菜单的。当满触发条gQ例如:鼠标UdC面)Ӟ在用javascript来控制次U菜单显C。当在次满触发条gӞ例如Q鼠标移开Q,控制ơ菜单隐藏?
我们现在讲的q个” 自适应分L率可扩展二层JS下拉菜单”可以自动适应览器分辨率的改变始l保持相对位|。可以方便的自己定制菜单昄内容及连接页面。可以随意扩充主D和次D的栏目个数。可以自由改变连接和D表格的样式和外观{等?
2?自适应分L率可扩展二层JS下拉菜单"js代码详解
//--------------- d航条内容 ------------//
var mainLayer=new Array("蓝色理想","动意营?);//d航栏?
//--------------- ơ导航条内容 ------------//
var subLayer0=new Array("论坛","文献"); //D栏目一下的ơ栏目
var subLayerHttp0=new Array("#","#");’’;//d航栏目一下的ơ栏目q接地址
var subLayer1=new Array("论坛","文献");//D栏目二的ơ栏目
var subLayerHttp1=new Array("#","#");//d航栏目二的次U栏目连接地址
//--------------- d航条Table参数调整 ------------//
var mainTableTdWidth=100; //每个TD的宽度,调整d航内定w?
var mainTableBorder=0; //调整d航表D框宽?
var mainTableCellspacing=0; //调整d航表格Cellspacing
var mainTableCellpadding=1; //调整d航表格Cellpadding
var mainTableBgcolor="#000000"; //调整d航表D景色
var mainTableBordercolor=""; //调整d航表格编框颜?
var mainTableBackgroundImg=""; //调整d航表D景图片url地址
var hrefClassName="link" //调整url风格样式
var mainTableTdBgcolor="B2CBCF"; //调整d航表格Td?
//--------------- ơ导航条Table参数调整 ------------//
var subTableBorder=0; //调整ơ导航条表格Ҏ宽度
var subTableCellspacing=0; //调整ơ导航条表格Cellspacing
var subTableCellpadding=1; //调整ơ导航条表格Cellpadding
var subTableBgcolor="#000000"; //调整ơ导航条表格背景?
var subTableBordercolor=""; //ơ导航条表格~框颜色
var subTableBackgroundImg=""; //ơ导航条表格背景囄url地址
var subTableTdBgcolor="B2CBCF"; //调整ơ导航表格Td?
var sbuTabbleTop=21; //ơ导航表g下微?
var sbuTabbleLeft=-1; //ơ导航表格左叛_?
//--------------- pȝ参数*请勿调整 ------------//
var layerMax=mainLayer.length+10;
var layerName=”index”
//--------------- 生成下拉菜单 ------------//
function createMainLayer(){
document.write("
");
for(i=0;i
document.write("
}
document.write("
");
"+mainLayer[i]+"
for(j=0;j
createSubLayer(j);
}
document.write("
}
//--------------- 生成每项下拉菜单内容 ------------//
function createSubLayer(num){
var subLayerName= layerName +num;
var subLayerLeft=(mainTableTdWidth*num)+mainTableCellpadding+mainTableBorder;
var subLayerList=eval("subLayer"+num);
var subLayerHttpList=eval("subLayerHttp"+num);
document.write("
if(subLayerList.length!=0){
document.write("
for(h=0;h
document.write("
}
document.write("
");
"+subLayerList[h]+"
}
document.write("
}
//------------------------------ơ菜单显隐控?-------------------------//
function layervib(type,num){
var H=type;
var temp=(H='visible'?'hidden':'visible')
for(var i=0;i
var E=eval('document.all.index'+i+'.style');
var H=eval(i);
if(i==num){E.visibility=type}else{E.visibility=temp};
}
}
3?自适应分L率可扩展二层JS下拉菜单"js代码使用Ҏ?
(1) 上面的代码存储为js_daohang.js.攑֜和调用的面同一个目录下?
(2) 在需要用的叉中在如下位置d
Q?Q在需要显CZ拉菜单的地方使用
来生菜单。如下例。可以随意摆攑ֈ面的Q何位|?
(4)、如何添加新的主菜单及次U菜单的栏目?
假设我们要在已有的栏目里新增加一?#8220;七色?#8221;栏目。下面有“论坛”?#8220;文献”两个ơ栏目。那么我么首先要在代码的如下部分d“七色?#8221;?
var mainLayer=new Array("蓝色理想","动意营?,”七色?#8221;);//d航栏?
0 1 2
然后在如下的位置d“论坛”?#8220;文献”栏目及连接地址?
var subLayer0=new Array("论坛","文献"); //D栏目一下的ơ栏目
var subLayerHttp0=new Array("#","#");’’;//d航栏目一下的ơ栏目q接地址
var subLayer1=new Array("论坛","文献");//D栏目二的ơ栏目
var subLayerHttp1=new Array("#","#");//d航栏目二的次U栏目连接地址
var subLayer2=new Array("论坛","文献");//D栏目三的ơ栏目
var subLayerHttp2=new Array("#","#");//d航栏目三的次U栏目连接地址
注意Q蓝色部分是需要新d的部分。红色部分是要修改的部分。要和上面的~号一一对应?(5)、其他细节调整请参考代码详解部分?
4、附注及扩充?
代码中主要用的函数及方法详解?
Document.write(“tmp”)在页面中写入tmp.
var subLayerHttp1=new Array();定义一个新的数lsubLayerHttp1.
For(I=0;I
var temp=(H=???:?)当H的值等于?的时候temp{于?。反之temp的值等于??
增强功能?
//--------------- pȝ参数*请勿调整 ------------//
var layerMax=mainLayer.length+10;
var layerName=”index”
可以讄layerName=其他字段以生成新的下拉菜单。ə面内共存两个下拉菜单?
如有M问题误pL。Jiangyf@paic.com.cn
全文完?
]]>
用于包含JavaScript代码.
语法
属?
LANGUAGE 定义脚本语言
SRC 定义一个URL用以指定?JSl尾的文?
windows对象
每个HTML文档的顶层对?
属?
frames[] 子桢数组.每个子桢数组按源文档中定义的序存放.
feames.length 子桢个数.
self 当前H口.
parent 父窗?当前H口是中一个子H口).
top 层H口(是所有可见窗口的父窗?.
status 览器状态窗口上的消?
defaultStatus 当status无效?出现在浏览器状态窗口上的缺省消?
name 内部?为由window.open()Ҏ打开的窗口定义的名字.
Ҏ
alert("message") 昄含有l定消息?JavaScript Alert"对话?
confirm("message") 昄含有l定消息?Confirm"对话?有一个OK按钮和一个Cancel按钮).如果用户单击OKq回true,否则q回false.
prompt("message") 昄一?prompt"对话?要求用户Ҏ昄消息l予相应输入.
open("URL","name") 打开一个新H口,l予一个指定的名字.
close() 关闭当前H口.
frame对象
它是整个览器窗口的子窗?除了status,defaultStatus,name属性外,它拥有window对象的全部属?
location对象
含有当前URL的信?
属?
href 整个URL字符?
protocol 含有URLW一部分的字W串,如http:
host 包含有URL中主机名:端口号部分的字符??/www.cenpok.net/server/
hostname 包含URL中主机名的字W串.如http://www.cenpok.net
port 包含URL中可能存在的端口号字W串.
pathname URL?/"以后的部?如~list/index.htm
hash "#"?CGI参数)之后的字W串.
search "?"?CGI参数)之后的字W串.
document对象
含有当前文档信息的对?
属?
title 当前文档标题,如果未定?则包?Untitled".
location 文档的全URL.
lastModified 含有文档最后修Ҏ?
referrer 调用者URL,即用h从哪个URL链接到当前页面的.
bgColor 背景?#xxxxxx)
fgColor 前景文本颜色.
linkColor 链接颜?
vlinkColor 讉Kq的链颜色.
alinkColor Ȁz链颜色(鼠标按住未放?.
forms[] 文档中form对象的数l?按定义次序存?
forms.length 文档中的form对象数目.
links[] 与文档中所有HREF铑֯应的数组对象,按次序定义存?
links.length 文档中HREF铄数目.
anchors[] ?...)数组,按次序定义存?
anchors.length 文档中锚的数?
Ҏ
write("string") 字W串H出l当前窗?(字符串可以含有HTML标记)
writeln("string") 与write()cM,在结追加回车符,只在预定格式文本?
...
?
...
)生效.
clear() 清当前窗?
close() 关闭当前H口.
form对象
属?/strong>
name
中的NAME属性的字符串?
method 中METHOD属性的cd?"0"="GET" ,"1"="POST" .
action 中ACTION属性的字符串?
target 表格数据提交的目?与标C相应属性一?
elements[index] elements属性包含form中的各个元素.
length 表格中的元素个数.
Ҏ
submit() 提交表格.
事g处理器onSubmit() 用户单击一个定义好的按钮提交form时运行的代码.
text和textarea对象
属?
name NAME属性的字符串?
value 域内容的字符串?
defaultValue 域内容的初始字符串?
Ҏ
focus() 讄对象输入焦点.
blur() 从对象上U走输入焦点.
select() 选定对象的输入区?
事g处理?/strong>
onFocus 当输入焦点进入时执行.
onBlur 当域失去焦点时执?
onSelect 当域中有部分文本被选定时执?
onChange 当域失去焦点且域值相对于onFocus执行有所改变时执?
]]>
]]>
源代码下?a >/Files/singlepine/AJAXDemo.rar
]]>
Ajax使用初步Q配|步?br>1.把Ajax.dll copy到应用系lbin目录下,然后在工E引用中引用Ajax.dllQ如果没有的话可以下?a >/Files/singlepine/Ajax.rar
2.配置web.configQ添加如下信?/font><httpHandlers>
<add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
</httpHandlers>
4.在Pages\AjaxTest下徏立cs文gAjaxMethod.csQ添加如下方?/font>
//[Ajax.AjaxMethod]
[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]
public static string GetNIVNumber(string str)
{
return str;
}
<HTML>
<HEAD>
<title>AjaxForm</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language="javascript">
function testAjax()
{
var first=document.getElementById("txtfirst");
AjaxMethod.GetNIVNumber(first.value,callback_GetNIVNumber);
}
function callback_GetNIVNumber(res)
{
var obj=document.getElementById("txtsecond");
obj.value=res.value;
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<INPUT style="Z-INDEX: 101; LEFT: 208px; POSITION: absolute; TOP: 40px" type="button" value="Button"
onclick="testAjax();">
<asp:TextBox id="txtfirst" style="Z-INDEX: 102; LEFT: 40px; POSITION: absolute; TOP: 40px" runat="server"></asp:TextBox>
<asp:TextBox id="txtsecond" style="Z-INDEX: 103; LEFT: 40px; POSITION: absolute; TOP: 72px" runat="server"></asp:TextBox>
</form>
</body>
</HTML>
protected System.Web.UI.WebControls.TextBox txtfirst;
protected System.Web.UI.WebControls.TextBox txtsecond;
private void Page_Load(object sender, System.EventArgs e)
{
//注册,其中Document.Pages.AjaxTest.AjaxMethod为AjaxMethod.csҎ所在的命名I间
Ajax.Utility.RegisterTypeForAjax(typeof(Document.Pages.AjaxTest.AjaxMethod));
}
]]>
1.建立一个aspx面Qhtml代码
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest()
{
if (window.ActiveXObject)
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest)
{
xmlHttp = new XMLHttpRequest();
}
}
function startRequest()
{
//debugger;
var ProvinceID=document.getElementById("DropDownList1");
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", "?ProvinceID="+ProvinceID.value, true);
xmlHttp.send(null);
}
function handleStateChange()
{
if(xmlHttp.readyState == 4) //0(未初始化);1(正在装蝲);2 (装蝲完毕);3 (交互?;4 (完成)
{
if(xmlHttp.status == 200) //200(OK);404(not found)
{
document.getElementById("gridiv").innerHTML=xmlHttp.responseText;
}
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</div>
<div id ="gridiv"></div>
</form>
</body>
</html>
using System.Data.SqlClient;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.DropDownList1.Attributes.Add("onchange", "return startRequest();");
ListProvince();
if (ProvinceID != "")
{
GetCityByProvinceID(ProvinceID);
}
}
}
property#region property
private string ProvinceID
{
get
{
if (Request["ProvinceID"] != null && Request["ProvinceID"].ToString() != "")
{
return Request["ProvinceID"];
}
else
{
return "";
}
}
}
#endregion
GetDataSet#region GetDataSet
private DataSet GetDataSet(string sql)
{
string constring=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlDataAdapter sda =new SqlDataAdapter(sql,constring);
DataSet ds=new DataSet();
sda.Fill(ds);
return ds;
}
#endregion
GetCityByProvinceID#region GetCityByProvinceID
private void GetCityByProvinceID(string ProvinceID)
{
string connStr = ConfigurationSettings.AppSettings["ConnectionString"];
SqlConnection conn = new SqlConnection(connStr);
string sql = "select * from city where father='" + ProvinceID + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
string s = @"<table cellspacing='0' cellpadding='4' border='0' id='GridView1' style='color:#333333;border-collapse:collapse;'>";
s+="<tr style='color:White;background-color:#990000;font-weight:bold;'>";
s+="<th scope='col'>水?lt;/th><th scope='col'>代号</th><th scope='col'>城市</th></tr>";
int m = 0;
while (dr.Read())
{
if (m % 2 == 0)
{
s += "<tr style='color:#333333;background-color:#FFFBD6;'>";
}
else
{
s += "<tr style='color:#333333;background-color:White;'>";
}
m++;
s += "<td>" + dr["id"] + "</td>";
s += "<td>" + dr["cityID"] + "</td>";
s += "<td>" + dr["city"] + "</td>";
s += "</tr>";
}
s+="</table>";
dr.Close();
conn.Close();
this.Response.Write(s);
this.Response.End();
}
#endregion
ListProvince#region ListProvince
private void ListProvince()
{
string sql = "select * from province";
DataSet ds = GetDataSet(sql);
DropDownList1.DataSource = ds;
DropDownList1.DataTextField = "province";
DropDownList1.DataValueField = "provinceID";
DropDownList1.DataBind();
}
#endregion
]]>
http://www.cnblogs.com/singlepine/archive/2006/05/21/405566.html
1.建立一aspx面Qhtml代码 <HTML>
<HEAD>
<title>WebForm1</title>
<SCRIPT language="javascript">
//城市------------------------------
function cityResult()
{
var city=document.getElementById("TextBox1");
WebForm1.GetCityList(city.value,get_city_Result_CallBack);
}
function get_city_Result_CallBack(response)
{
if (response.value != null)
{
//debugger;
document.getElementById("DropDownList1").style.display="block";
document.getElementById("DropDownList1").length=0;
var ds = response.value;
if(ds != null && typeof(ds) == "object" && ds.Tables != null)
{
for(var i=0; i<ds.Tables[0].Rows.length; i++)
{
var name=ds.Tables[0].Rows[i].city;
var id=ds.Tables[0].Rows[i].cityID;
document.getElementById("DropDownList1").options.add(new Option(name,id));
}
}
}
else
{
document.getElementById("DropDownList1").style.display="none";
}
return
}
function getData()
{
var province=document.getElementById("DropDownList1");
var pindex = province.selectedIndex;
var pValue = province.options[pindex].value;
var pText = province.options[pindex].text;
document.getElementById("<%=TextBox1.ClientID%>").innerText=pText;
}
</SCRIPT>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br>
<asp:DropDownList ID="DropDownList1" runat="server" Width="192px" style="display:none"></asp:DropDownList>
</form>
</body>
</HTML>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace ajaxselect
{
/**//// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.DropDownList DropDownList1;
private void Page_Load(object sender, System.EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(WebForm1));
if (!Page.IsPostBack)
{
this.TextBox1.Attributes.Add("onchange", "cityResult();");
this.DropDownList1.Attributes.Add("onclick", "getData();");
}
}
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
GetCityList#region GetCityList
[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]
public DataSet GetCityList(int provinceid)
{
string sql = "select * from city where father like '%" + provinceid + "%'";
return GetDataSet(sql);
}
#endregion
GetDataSet#region GetDataSet
public static DataSet GetDataSet(string sql)
{
string ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlDataAdapter sda = new SqlDataAdapter(sql, ConnectionString);
DataSet ds = new DataSet();
sda.Fill(ds);
return ds;
}
#endregion
}
}
4.数据库脚?br>
CREATE TABLE [dbo].[city](
[id] [int] NOT NULL,
[cityID] [nvarchar](6) COLLATE Chinese_PRC_CI_AS NULL,
[city] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[father] [nvarchar](6) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_city] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
]]>
]]>
]]>
]]>
]]>
FireFox{其它非微Y的浏览器遇到跨域讉KQ则解决Ҏl一是拒l访问?br>
有h_IE是主浏览器Q只要它能正怋用就好了。此a差已QIE虽然能够处理Q但是是有前提的Q要么用户不厌其烦地在页面弹告框之后点击是(点击
否就不执行该Ajax调用了)Q要么用户将该网站纳入可信Q站点。这两种做法Q在企业理pȝ的应用中倒是比较常见Q因为系l管理员可以以行政手D保证用
L行ؓ。但是对于互联网上的|站或者门户开发,q种做法则不行?br> 最q遇Cq个问题Q需要在跨域讉Kl束之后完成使主H口出现一些特效,搜烦了一些资料,通过不断试以及在不同浏览器中进行兼Ҏ测试,扑ֈ了几个可行的ҎQ?br> 1?
Web代理的方式。即用户讉KA|站时所产生的对B|站的跨域访问请求均提交到A|站的指定页面,p面代替用户面完成交互Q从而返回合适的l果。此
Ҏ可以解决现阶D|能够惛_的多数跨域访问问题,但要求A|站提供Web代理的支持,因此A|站与B|站之间必须是紧密协作的Q且每次交互q程QA|站
的服务器负担增加Q且无法代用户保存session状态?br> 2、on-Demand方式。MYMSN的门户就用的q种方式Q不q?
MYMSN中不涉及跨域讉K问题。动态控制script标记的生成,通过修改script标记的src属性完成对跨域面的调用。此Ҏ存在的缺hQ?
script的src属性完成该调用旉取的方式时get方式Q如果请求时传递的字符串过大时Q可能会无法正常q行。不q此Ҏ非常适合聚合c门户用?br> 3?
iframe方式。查看过醒来在javaeye上的一关于跨域访问的帖子Q他提到自己已经用iframe的方式解决了跨域讉K问题。数据提交跟获取Q采
用iframeq种方式的确可以了,但由于父H口与子H口之间不能交互Q跨域访问的情况下,q种交互被拒l)Q因此无法完成对父窗口效果的影响?br> 4?
用户本地转储方式QIE本n依附于windowsq_的特性ؓ我们提供了一U基于iframeQ利用内存来“l行”的方案,即两个window之间可以?
客户端通过windows剪脓板的方式q行数据传输Q只需要在接受数据的一方设|Intervalq行轮询Q获得结果后清除Interval卛_。FF?
q_独立性决定了它不支持剪脓板这U方式,而以往版本的FF中存在的插g漏洞又被fixed了,所以FF无法通过内存来完成暗渡陈仓。而由于文件操作FF
也没有提供支持(无法通过Cookie跨域完成数据传递)Q致使这U技巧性的方式只能在IE中用?br> 5、我自己用于解决q类?
题的方式Q结合了前面几种方式Q在讉KA|站Ӟ先请求B|站完成数据处理Q再Ҏq回的标识来获得所需的结果。这U方法的~点也很明显QB|站的负载增
大了。优点,对session也实C保持Q同时A|站与B|站面间的交互能力增强了。最重要的一点,q种Ҏ满了我的全部需?
]]>
<IFRAME ID="IFrame2" FRAMEBORDER=0
onload="dyniframesize('IFrame2');" marginwidth=0 marginheight=0
SCROLLING=NO SRC="****.jsp" width="187"></IFRAME>
<script language="Javascript">
<!--
var getFFVersion=navigator.userAgent.substring(navigator.userAgent.indexOf("Firefox")).split("/")[1]
//extra height in px to add to iframe in FireFox 1.0+ browsers
var FFextraHeight=getFFVersion>=0.1? 16 : 0
function dyniframesize(iframename) {
var pTar = null;
if (document.getElementById){
pTar = document.getElementById(iframename);
}
else{
eval('pTar = ' + iframename + ';');
}
if (pTar && !window.opera){
//begin resizing iframe
pTar.style.display="block"
if (pTar.contentDocument && pTar.contentDocument.body.offsetHeight){
//ns6 syntax
pTar.height = pTar.contentDocument.body.offsetHeight+FFextraHeight;
}
else if (pTar.Document && pTar.Document.body.scrollHeight){
//ie5+ syntax
pTar.height = pTar.Document.body.scrollHeight;
}
}
}
-->
</script>
<IFRAME> 里面的属性我׃多说了,都是很常见的。这里我多写了一个函数dyniframesize()Q它的作用是处理装蝲面与容器页面的同步Q即大调整到合适的位置?br>因ؓq样装蝲的页面很隑֛定的控制大小Q所以用Documentq行相对大小的设定,是一个不错的x?/p>
Ajaxq个名称怎么来的Q本Z不得而之了,大概是(Active Javascript Action XmlQ吧Q说白一点就是运用了 javascript、xmlhttp和xmldom技术及|站后台来处理用L一些操作的Ҏ吧?/p>
那么本h分三步来说明如何?Ajax 技术来做开发?/p>
一、用 javascript 操作 xmlhttp 对象
二、服务器部对xmlhttph的响应(PHP范例Q?/p>
三、xmldom 的用方?/p>
先说W一部䆾Q?/p>
一、用 javascript 操作 xmlhttp 对象
IE7, Mozilla ,Firefox{浏览器中,javascript是内|有 XMLHttpRequest q个对象的,但IE5+则没有,需要用如下Ҏ来启动:
//IE 6
try{ xhttp = new ActiveXObject("Msxml2.XMLHTTP";} catch(e){ ; }
//IE5+
if(xhttp == null) try { xhttp = new
ActiveXObject("Microsoft.XMLHTTP";} catch(e){ ; }
那考虑不同览器的兼容Q启动一个xmlhttp一般都要按如下方式Q?/p>
CODE:[Copy to clipboard]var xhttp = null;
if(window.XMLHttpRequest){ //IE7, Mozilla ,Firefox {浏览器内置该对?/p>
xhttp = new XMLHttpRequest();
}else if(window.ActiveXObject){ //IE6、IE5
try{ xhttp = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e){ ; }
if( xhttp == null) try { xhttp = new
ActiveXObject("Microsoft.XMLHTTP");} catch (e){; }
}
对于 xmlhttp 的用,一般遵守如下的序Q?/p>
1、初始化 xmlhttp 对象Q上文)Q?/p>
2、打开链接
Ҏ
xhttp.open("GET", purl, true);
参数一Q用 GET ?POST 方式发送数?/p>
参数二、请求网址Q只能请求你服务器上的资源,一般浏览器安全限制不能d跨域的数据)
参数三、true 表示异步传输Q服务器q回信息完成前,你可以进行其它操作)Qfalse 表示L方式的传输?/p>
3、设定要发送的 http h?/p>
ҎQ?/p>
xhttp.setRequestHeader(key,value);
一般来_默认要发送的头是Qxhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded";
q种表示发送的内容cd的请求头用于发送文本数据,而且javascript默认是以unicode发送的Q还有另外一UŞ式是Qxhttp.setRequestHeader("Content-Type","multipart/form-data";q表C发送二制Ş式的数据Q由于安全性原因,javascript一般不能用q种方式来发送数据,所以这个头一般没什么用?/p>
如果你的|站开启了使用 refer 参数来防盗链Q那么你必须用这个方法指?Refer 参数Q或者如果用户需要登录才能进行某操作Q那么要指定 Cookie 的请求头?/p>
4、send 数据
ҎQxhttp.send(postdata);
对于?getLhQ不需要指定postdataQ直接用 test.php?a=a&b=b q样形式的网址来请求即可?/p>
如果是post方式Q需要用 key1=value2&key2=value2 q样的Ş式来Ҏ据进行处理,把它合ƈ? postdata 字串中,然后发送?/p>
注意事项Q?/p>
javascript默认发送数据的方式是unicodeQ处理返回的数据必须是utf-8格式Q因此,在发送的时候,需要用escape()函数来处理postdata和网址的valueQ在服务器上必须q原q些valueQƈ把unicode转ؓ面~码|因此如果?jsp ?asp.
if (this.xhttp == null) try { this.xhttp = new
ActiveXObject("Microsoft.XMLHTTP");} catch (e) { }
}
this.xhttp.onreadystatechange = WiteOKFunc;
//rs: responseBody、responseStream、responseXml、responseText
//以下为成员函?br> //--------------------------------
//初始化xmldom
this.InitXDom = function(){
var obj = null;
if (typeof(DOMParser) != "undefined") { // Gecko、Mozilla、Firefox
var parser = new DOMParser();
obj = parser.parseFromString(xmlText, "text/xml");
} else { // IE
try { obj = new
ActiveXObject("MSXML2.DOMDocument");} catch (e) { }
if (obj == null) try { obj = new
ActiveXObject("Microsoft.XMLDOM"); } catch (e) { }
}
this.xdom = obj;
};
//增加一个POST或GET键值对
this.AddKey = function(skey,svalue){
this.keyCount++;
this.keys[this.keyCount] = skey;
this.values[this.keyCount] =
escape(svalue);
};
//增加一个Httph头键值对
this.AddHead = function(skey,svalue){
this.rkeyCount++;
this.rkeys[this.rkeyCount] = skey;
this.rvalues[this.rkeyCount] =
svalue;
};
//清除当前对象的哈希表参数
this.ClearSet = function(){
this.keyCount = -1;
this.keys = Array();
this.values = Array();
this.rkeyCount = -1;
this.rkeys = Array();
this.rvalues = Array();
};
//发送httph?br>
this.SendHead = function(){
if(this.rkeyCount!=-1){ //发送用戯行设定的h?br>
for(;i<=this.rkeyCount;i++){
this.xhttp.setRequestHeader(this.rkeys[i],this.rvalues[i]);
}
}
if(this.rtype=='binary'){
this.xhttp.setRequestHeader("Content-Type","multipart/form-data");
}else{
this.xhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
};
//用Post方式发送数?br>
this.SendPost = function(purl){
var pdata = "";
var i=0;
this.state = 0;
this.xhttp.open("POST",
purl, true);
this.SendHead();
if(this.keyCount!=-1){ //post数据
for(;i<=this.keyCount;i++){
if(pdata=="") pdata = this.keys[i]+'='+this.values[i];
else pdata += "&"+this.keys[i]+'='+this.values[i];
}
}
this.xhttp.send(pdata);
};
//用GET方式发送数?br>
this.SendGet = function(purl){
var gkey = "";
var i=0;
this.state = 0;
if(this.keyCount!=-1){ //get参数
for(;i<=this.keyCount;i++){
if(gkey=="") gkey = this.keys[i]+'='+this.values[i];
else gkey += "&"+this.keys[i]+'='+this.values[i];
}
if(purl.indexOf('?')==-1) purl = purl + '?' + gkey;
else purl = purl +
'&' + gkey;
}
this.xhttp.open("GET",
purl, true);
this.SendHead();
this.xhttp.send();
};
} // End Class DedeAjax
上面代码保存为: dedeajax.js
ok 那现在做个最单的试?br> test.htm
CODE:[Copy to clipboard]<script
language='javascript' src='dedeajax.js'></script>
<script language='javascript'>
function WiteOK()
{
var myinfo = document.getElementById("myinfo");
if(myajax.xhttp.readyState == 4){
if(myajax.xhttp.status == 200){
myinfo.innerHTML = myajax.xhttp.responseText;
}
}
}
var myajax = new DedeAjax(WiteOK);
myajax.AddKey("key1","----------------------------");
myajax.SendPost("test.php");
</script>
<div id='myinfo'><div>
test.php
CODE:[Copy to clipboard]<?
header("Content-Type: text/html; charset=gb2312");
echo $_POST['key1'];
?>
看到了什么了呢?不用Ȁ动,真正让你头痛的东西还没有出来?/p>
把类里面?/p>
CODE:[Copy to clipboard]this.AddKey =
function(skey,svalue){
this.keyCount++;
this.keys[this.keyCount] = skey;
this.values[this.keyCount] = svalue;//escape(svalue);
};
escape 屏蔽?/p>
发?
myajax.AddKey("key1","-----?--?---?----";
看到什么了Qؕ码是吧?呵呵Q这回开始头大了
先把 escape攑֛?br> this.values[this.keyCount] = escape(svalue);
那么看到的就?br> -----%u4E2D---%u56FD----%u4EBA-----
如何?nbsp; %u4E2D q些东西弄回来呢Q对于php而言q是一个很复杂的问题,如果用aspq单多?/p>
下面是我写的一个函敎ͼ
CODE:[Copy to clipboard]//unicode url~码转gbk~码函数
function Unicode2Gbk($str)
{
//载入对照词典
if(!isset($GLOBALS['GbkUniDic']))
{
$ds =
file("./data/gbk_unicode.dic");
foreach($ds as $l){
$GLOBALS['GbkUniDic'][hexdec('0x'.substr($l,0,4))] = substr($l,5,4);
}
}
//处理字符?br>
$glen = strlen($str);
$okstr = "";
for($i=0; $i < $glen; $i++)
{
if( $glen-$i >
4){
if($str[$i]=='%' && $str[$i+1]=='u'){
$uni = hexdec('0x'.substr($str,$i+2,4));
if(isset($GLOBALS['GbkUniDic'][$uni])){
$uni = $GLOBALS['GbkUniDic'][$uni];
$okstr .= chr(hexdec(substr($uni,0,2))).chr(hexdec(substr($uni,2,2)));
}
else $okstr .= "{".hexdec("0x".$uni).";";
$i = $i+5;
}
else $okstr .= $str[$i];
}
else $okstr .=
$str[$i];
}
return $okstr;
}
词典文gQ?http://www.ce86.com/myimg/data.rar
把test.php 输出改ؓ
echo Unicode2Gbk($_POST['key1']);
正常了吧
以下说下面和xml有关的东西的?/p>
思义QXMLHTTP是个传送XML格式数据的超文本传输协议?
实际上,XMLHTTP的数据传输过E更为灵zM些:
它上传的指o可以是XML格式数据Q也可以是字W串Q流Q或者一个无W号整数数组。还可以是URL的参数?
它下辄l果可以是XML格式数据Q也可以是字W串Q流Q或者一个无W号整数数组?
详情可参阅文末链接?
客户端调用XMLHTTP的过E很单,只有5个步骤:
1、创建XMLHTTP对象
2、打开与服务端的连接,同时定义指o发送方式,服务|页(URL)和请求权限等?
客户端通过Open命o打开与服务端的服务网늚q接。与普通HTTP指o传送一P可以?GET"Ҏ?POST"Ҏ指向服务端的服务|页?
3、发送指令?
4、等待ƈ接收服务端返回的处理l果?
5、释放XMLHTTP对象
XMLHTTPҎ
Open bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword
bstrMethodQ数据传送方式,即GET或POST?
bstrUrlQ服务网늚URL?/p>
varAsyncQ是否同步执行。缺省ؓTrueQ即同步执行Q但只能在DOM中实施同步执行。应用中一般将其置为FalseQ即异步执行?/p>
bstrUserQ用户名Q可省略?
bstrPasswordQ用户口令,可省略?
Send varBody
varBodyQ指令集。可以是XML格式数据Q也可以是字W串Q流Q或者一个无W号整数数组。也可以省略Q让指o通过OpenҎ的URL参数代入?
setRequestHeader bstrHeader, bstrValue
bstrHeaderQHTTP ?header)
bstrValueQHTTP ?header)的?/p>
如果OpenҎ定义为POSTQ可以定义表单方式上传xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
XMLHTTP属?/p>
onreadystatechangeQ在同步执行方式下获得返回结果的事g句柄。只能在DOM中调用?
responseBodyQ结果返回ؓ无符h数数l?
responseStreamQ结果返回ؓIStream?
responseText Q结果返回ؓ字符丌Ӏ?
responseXMLQ结果返回ؓXML格式数据?
下面是本文附件源E序中的一个应用示例:
Function GetResult(urlStr)
Dim xmlHttp
Dim retStr
Set xmlHttp = CreateObject("Msxml2.XMLHTTP") '创徏对象
On Error Resume Next '出错处理
xmlHttp.Open "POST", urlStr, False '用POST方式打开q接Q异步执行?
xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" '上传表单
xmlHttp.Send '发送指?/p>
If Err.Number = 0 Then '如果q接正确
retStr = xmlHttp.responseText '{待q获得服务端q回的结果字W串
Else
retStr = "Url not found" '否则q回出错信息
End If
Set xmlHttp = nothing '释放对象
GetResult = retStr 'q回l果
End Function
GetResult()函数带入一个服务网늚URL参数Q把上传的指令安攑֜URL后面的参CQ如Q?
urlStr = "server.asp?cmd=" & cmd & "&db=" & db & "table=" & table
cmdQ执行方式,例如查询Q修改,删除{等?
dbQ服务端数据库名
tableQ服务端表名
然后提交指oQ等待ƈ接收q回的处理结果。结果以字符串方式返回。最后由函数调用者处理ƈ昄l果?/p>
100
Continue 初始的请求已l接受,客户应当l箋发送请求的其余部分
101 Switching Protocols 服务器将遵从客户的请求{换到另外一U协?br>
200 OK 一切正常,对GET和POSTh的应{文档跟在后面?br>
201 Created 服务器已l创Z文档QLocation头给Z它的URL?
202 Accepted 已经接受hQ但处理未完成?
203 Non-Authoritative Information 文档已经正常地返回,但一些应{头可能不正,因ؓ使用的是文档的拷?
204 No Content 没有新文档,览器应该l显C原来的文档。如果用户定期地h面Q而Servlet可以定用户文档_斎ͼq个状态代码是很有用的
205 Reset Content 没有新的内容Q但览器应该重|它所昄的内宏V用来强制浏览器清除表单输入内容
206 Partial Content 客户发送了一个带有Range头的GEThQ服务器完成了它
300 Multiple Choices 客户h的文档可以在多个位置扑ֈQ这些位|已l在q回的文档内列出。如果服务器要提Z先选择Q则应该在Location应答头指明?
301 Moved Permanently 客户h的文档在其他地方Q新的URL在Location头中l出Q浏览器应该自动地访问新的URL?
302 Found cM?01Q但新的URL应该被视Z时性的替代Q而不是永久性的?
303 See Other cM?01/302Q不同之处在于,如果原来的请求是POSTQLocation头指定的重定向目标文档应该通过GET提取
304 Not Modified 客户端有~冲的文档ƈ发出了一个条件性的hQ一般是提供If-Modified-Since头表C客户只x指定日期更新的文档)。服务器告诉客户Q原来缓冲的文档q可以l用?
305 Use Proxy 客户h的文档应该通过Location头所指明的代理服务器提取
307 Temporary Redirect ?02QFoundQ相同。许多浏览器会错误地响应302应答q行重定向,即原来的请求是POSTQ即使它实际上只能在POSTh的应{是303时才能重定向。由于这个原因,HTTP
1.1新增?07Q以便更加清除地区分几个状态代码:当出?03应答Ӟ览器可以跟随重定向的GET和POSThQ如果是307应答Q则览器只能跟随对GETh的重定向?
400 Bad Request h出现语法错误?
401 Unauthorized 客户试图未经授权讉K受密码保护的面。应{中会包含一个WWW-Authenticate_览器据此显C用户名?密码对话框,然后在填写合适的Authorization头后再次发出h?
403 Forbidden 资源不可用?br>
404 Not Found 无法扑ֈ指定位置的资?br>
405 Method Not Allowed hҎQGET、POST、HEAD、DELETE、PUT、TRACE{)Ҏ定的资源不适用?br>
406 Not Acceptable 指定的资源已l找刎ͼ但它的MIMEcd和客户在Accpet头中所指定的不兼容
407 Proxy Authentication Required cM?01Q表C客户必dl过代理服务器的授权?br>
408 Request Timeout 在服务器许可的等待时间内Q客户一直没有发ZQ何请求。客户可以在以后重复同一h?
409 Conflict 通常和PUTh有关。由于请求和资源的当前状态相冲突Q因此请求不能成功?br>
410 Gone 所h的文档已l不再可用,而且服务器不知道应该重定向到哪一个地址。它?04的不同在于,q回407表示文档怹地离开了指定的位置Q?04表示׃未知的原因文档不可用?
411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头?
412 Precondition Failed h头中指定的一些前提条件失?br>
413 Request Entity Too Large 目标文档的大超q服务器当前愿意处理的大。如果服务器认ؓ自己能够E后再处理该hQ则应该提供一个Retry-After?
414 Request URI Too Long URI太长
416 Requested Range Not Satisfiable 服务器不能满_户在h中指定的Range?br>
500 Internal Server Error 服务器遇C意料不到的情况,不能完成客户的请?br>
501 Not Implemented 服务器不支持实现h所需要的功能。例如,客户发出了一个服务器不支持的PUTh
502 Bad Gateway 服务器作为网x者代理时Qؓ了完成请求访问下一个服务器Q但该服务器q回了非法的应答
503 Service Unavailable 服务器由于维护或者负载过重未能应{。例如,Servlet可能在数据库q接池已满的情况下返?03。服务器q回503时可以提供一个Retry-After?
504 Gateway Timeout ׃Z理或|关的服务器使用Q表CZ能及时地从远E服务器获得应答
505 HTTP Version Not Supported 服务器不支持h中所指明的HTTP版本
(? XMLHttpRequest 对象Ҏ
abort() 停止当前h
getAllResponseHeaders() 作ؓ字符串返问完整的headers
getResponseHeader("headerLabel") 作ؓ字符串返问单个的header标签
open("method","URL"[,asyncFlag[,"userName"[,
"password"]]]) 讄未决的请求的目标 URL, Ҏ, 和其他参?br>
send(content) 发送请?br>
setRequestHeader("label", "value") 讄headerq和h一起发?/p>
(? XMLHttpRequest 对象属?/p>
onreadystatechange 状态改变的事g触发?br>
readyState 对象状?integer):
0 = 未初始化
1 = d?br>
2 = 已读?br>
3 = 交互?br>
4 = 完成
responseText 服务器进E返回数据的文本版本
responseXML 服务器进E返回数据的兼容DOM的XML文档对象
status 服务器返回的状态码, 如:404 = "文g末找? ?00 ="成功"
statusText 服务器返回的状态文本信?/p>