QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1783|回复: 0
打印 上一主题 下一主题

ajax对象常用属性,事件,方法大小写问题的总结

[复制链接]
字体大小: 正常 放大
拉克丝        

31

主题

9

听众

44

积分

升级  41.05%

  • TA的每日心情
    擦汗
    2015-4-30 14:17
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    德玛西亚
    跳转到指定楼层
    1#
    发表于 2015-4-16 16:14 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    最近发现ajax版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。6 _# A6 v; |3 j: l: i

    4 L  E' L: d0 P$ z  下面是ajax对象的一些常用属性,事件和方法
    8 f$ Q, `, ^/ U4 [1 @: Z4 L' ?) B. ]  1)标准的ajax对象的属性有readyState,status,responseText,responseXML; u7 B% ?, ?$ R  z
    1 o9 \5 }6 z1 ?# K. G4 h
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    ; T6 y# n( V. t$ Q* w/ {[backcolor=white !important][size=1em]Visual Basic code0 P- Y# m1 `- H: [  U; r% u! I
    [color=white !important][size=1em]?

    . ]$ M6 p- B3 ^( F
    [size=1em]1

    # x, S9 i  d1 W% m9 R/ [
    [size=1em]2
    - X$ L1 f, V9 O  q9 y7 ^1 \
    [size=1em]3
    9 g& P2 K3 x* p9 `$ R3 F
    [size=1em]4
    $ e$ m+ {3 e) ~  N' R/ n( t
    [size=1em]5

    # N# i$ t1 c5 [; @, p, {
    [size=1em]6
    + }8 ~* y  j* ^/ U
    [size=1em]7
      e& i* z+ P" p3 w+ h5 X
    [size=1em]8

    3 X* b, r. t4 Y% M1 h1 W
    [size=1em]9
    , o8 H1 Y7 u; m, v$ C  M, U
    [size=1em]10
    / b; i% p1 f5 n* ~3 V: w2 d
    [size=1em]11
    3 i3 g! `; l* U# O! }/ M7 y7 ^" h
    [size=1em]12

    # B- {8 t  Q% i6 {
    [size=1em]13
    9 x; J4 \* b: E9 p: O# E
    [size=1em]14

    ( w4 Y& K, h( J3 m
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串: [0 T6 \" J6 I8 W& g
    [size=1em]     strreturn = ""& E9 }/ G; d. ?5 Y
    [size=1em]     for i = 1 to lenb(vin)# N* a5 ?( P1 {, V, R  y. P
    [size=1em]     thischarcode = ascb(midb(vin,i,1)). G$ }: v% |" F) K, Q
    [size=1em]     if thischarcode < &h80 then" }: v; ]/ ~9 D( k/ k' `+ h' w, C6 q
    [size=1em]        strreturn = strreturn & chr(thischarcode)
    " I) N' M, S- K5 a! t6 I[size=1em]     else
    / }/ ~/ b1 ]. M  g% V/ S2 r[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))  k  U5 d/ ]8 c  `2 X% f5 E5 j, c+ S
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    / d3 o( p* o6 s/ z9 h9 }8 x[size=1em]        i = i + 1
    4 i+ x+ v/ n; i8 f# O[size=1em]     end if
    ) `. {- e5 t* F( }0 e& U[size=1em]     next
    7 j3 O- t- n0 V; \" \1 V6 r[size=1em]     Bytes2BStr = strreturn+ L; M' X9 I% @2 g2 N* B
    [size=1em]End Function3 T6 J3 R6 e$ x% Q: K+ _
    - ?7 ?8 j# A, S3 K5 k5 f5 m2 _

    7 f, J$ b( z* Z- N& J, P; }( F1 n& @% l3 i+ _6 Q2 p! N

    # Q7 R' t) Q/ |- x: k7 y. b. ~; K0 ^/ ]9 N1 d
    & V3 w6 V$ M0 v3 ^
      3)事件onreadystatechange,状态转换函数
    ) _5 ?3 F6 U/ N3 g$ l$ B  |+ F
    ; x6 i+ ~" X% |* p0 v  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。2 K  J# W5 S1 s& y9 X; X( @
    参考7 c$ u. W/ q$ u' f
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容2 \6 U! h7 Q) {
    & T) w8 h( C" }3 Z/ s- ?5 @" l" d
      容易出现错误的问题
    " g% i( E* z& y+ V8 m& F% x$ }$ F* X7 P1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    $ d( X% Y$ h$ \8 W) B7 j7 P+ L
    ) H& @& R3 P! A2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写# q; X0 J9 Y& V$ e

    - w1 _# u& I: {; X3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    ! P2 _5 m& ]' \0 [
    ; |) |  K( v) b& w1 H5 t# O4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。" X" M4 `, ~/ A' Q$ b# L
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    8 _2 @: R. H5 z3 z* `3 N: ~+ o- l5 i" ]7 t$ z
      对于手写ajax代码一些建议3 W, G& O' m+ I
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。. n4 D3 }: ^& T; K8 z
    参考webservice json
    1 Y" t& o0 n! W  t* F% x' U
    6 n8 I& V7 A9 X, s& ?  q% f6 B2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);$ l( G6 M8 L; ?8 F
    9 s3 R4 X! i" B. @6 [2 P. x' O
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    9 m2 e" L4 S8 S) S" Q8 r) G' U. x" `! R3 J. E: j9 F# ?
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    . g0 N! \% c. R, \* U! {
      O# ^, P% S+ s0 _5 n; Q" h+ f9 I( i0 p[backcolor=white !important][size=1em]JavaScript code) s/ M3 G* ~7 x  m
    [color=white !important][size=1em]?
    ; o! V8 i4 z8 Z, E( Z
    [size=1em]1
    1 p9 V! s4 R& p1 A2 p5 m  f
    [size=1em]2

    6 G6 G# U6 q, ?* G; x
    [size=1em]3

    - r  \5 _) y& `! ?  W7 y0 {! q. N
    [size=1em]4

    5 p* ]$ u8 N* o7 |3 r. i9 @
    [size=1em]5
    . x3 h7 x8 d0 W) Q* {
    [size=1em]6
    : f/ p6 I, z  S+ m% J4 J5 J4 l
    [size=1em]7

    ; D6 u  \& O4 l/ \4 J
    [size=1em]8

    ) ~8 {! P' F/ H# n1 y' G
    [size=1em]9
    5 T* Q( `2 E( k: k0 k5 d
    [size=1em]10

    / j( n& E- o3 w( d- R! R
    [size=1em]11

    ; K9 h1 T' {2 I( X
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    # e( e0 Y+ |4 o% i+ x[size=1em]      xhr.open('get', 'index.html', true);
    + i( L$ E' B8 q[size=1em]      xhr.onreadystatechange = function () {
    " ~& K0 o- @) o/ J% l% a! f; o[size=1em]          if (4 == xhr.readyState) {
    2 O6 N! X- m- r" H* t[size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    2 ], D: a- J2 {+ k2 J# M: i4 X2 R[size=1em]                  //=========正常返回后的处理代码! u! e% |* J: K& [% e
    [size=1em]              }
    7 {7 ^, d4 h) C- Q1 d4 c[size=1em]              else alert('动态页出问题了~~');
    / @5 w4 L2 i" D3 U* k! j[size=1em]          }
    & H) D0 \" Z( x1 X% `0 r- ?7 R[size=1em]      }9 J7 E& N+ n  [# n
    [size=1em]      xhr.send(null);* X( X* M, ]4 u9 d$ h* W- Y( E- }

    6 H% k% r/ K  N. d$ \: y, y7 F9 f  |
    2 `4 ~5 F4 j5 g: o! t6 O4 ~

    - Q  p* I3 [/ R. m. _! `! d! [9 F5 W2 C

    7 l! K. [" i: f! A$ D2 d7 B( L2 R$ w; n+ J8 ^
    4 h# n1 l) T( i* E& @% h
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    ; N. S* P* m% ]7 [如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    ' j2 W$ o  K+ U& s1 {& _
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-12-25 11:26 , Processed in 1.195538 second(s), 53 queries .

    回顶部