QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1835|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。( R, v1 ]  y2 k% A  g9 Q' `

    / c) u5 T- f0 Q# Y, R5 C% f, \  下面是ajax对象的一些常用属性,事件和方法& l* G1 |2 R) C# _
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML& u$ `+ z6 C4 v: V

    . W7 e- F. M' b  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    ' J  q9 l; o. P0 [) P) z1 R[backcolor=white !important][size=1em]Visual Basic code( g3 V' \- U& G9 ?! Q
    [color=white !important][size=1em]?
    ' u- i1 I" p0 G5 O8 L
    [size=1em]1

    1 `! U" u4 i1 l" [# n
    [size=1em]2

    ( w6 E/ m, W6 _* O: R
    [size=1em]3
    # a- S7 H; H/ N: V: i! C
    [size=1em]4
    # I' y$ `3 |1 T  D  @! }6 V0 U: c
    [size=1em]5
    8 z- ~( L" R' z
    [size=1em]6

    ! A! j. A& H' b7 P# m/ O) h
    [size=1em]7

    4 E% y* Z1 y0 `9 q
    [size=1em]8

    - o3 W2 p# z. R2 x! |$ U0 X
    [size=1em]9

    ( a2 \$ B# f3 {  Z3 O
    [size=1em]10

    9 Q% A4 ~8 r9 @
    [size=1em]11
    & V1 G! K/ u, E& q; Z  }9 m
    [size=1em]12
    % @! }- w/ \3 }; M; c) o7 b
    [size=1em]13

    / N& w( a& o) b9 L0 I, X/ }
    [size=1em]14

    ) n; U" g5 F4 x
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串  I9 N, W. [. W' K( K
    [size=1em]     strreturn = ""
    ; u; ^" O8 G1 V! b+ {4 Y3 l[size=1em]     for i = 1 to lenb(vin)
    . v0 s6 s4 E: |- B/ ^" p$ i: g[size=1em]     thischarcode = ascb(midb(vin,i,1))
    6 s: F# i% V- L: O/ }' @[size=1em]     if thischarcode < &h80 then* k: M) Z. O1 h  m  E( X
    [size=1em]        strreturn = strreturn & chr(thischarcode)% o/ ^: y0 Q$ E. }! f/ A" @6 q  x
    [size=1em]     else& s( v- i: R' f5 i
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))! S# B0 c3 Q* U1 p
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    0 T  [5 |+ h' R9 X- x# y[size=1em]        i = i + 1
    & I9 c5 I0 k# f& ~) m  x[size=1em]     end if  o3 D' m9 |3 L( J! p& k  V( |7 c# D/ [
    [size=1em]     next
    8 d  F& b0 [8 Y9 k# R[size=1em]     Bytes2BStr = strreturn4 c# e% P' h- S( m/ |+ J
    [size=1em]End Function/ @/ L: E. K9 r8 [1 C

    1 r' z$ {5 ~$ ^% t% O9 ?: F
    2 ^8 l$ m& B/ n% n/ q$ ]
      i+ N; \; x* k

    / H/ D  g8 _+ N% t) y8 \' r9 U9 D; @( C% X, m5 d: C$ I
    - C: B. z2 G/ z5 l/ E7 L
      3)事件onreadystatechange,状态转换函数
    0 A$ y7 F, B9 C( G1 A' _
    ) f/ ^* J3 G- n9 B2 b1 ?  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。( U" z( K9 I# j/ t
    参考( `  R$ H$ I4 n' ?
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    , q- G; _( q: X" T3 k
    * `* O9 k2 r1 i  容易出现错误的问题0 I; t2 y; F  W5 V- v
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    3 }  J3 o$ h' i. G! K& z3 a6 I. c( g9 M* |/ H
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    ! S$ n) H, g% @! f8 a1 T
    / D8 P$ J, x3 X" z7 A3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写  \" X. _) k. S9 Z2 A, `& L9 F

    6 |9 Z8 @7 l; G" @8 U9 n" c4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。+ L4 b6 K: l0 O% p" j
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。9 l7 b, w$ r; |4 J# ?$ y9 [' ^

    5 n5 C' G% g5 t  对于手写ajax代码一些建议8 E- m# u7 H- @$ i
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
      ]( a. S5 M! P& Q$ V! H9 U: `2 J参考webservice json# ]+ J: ^2 C1 q' X: {* u% @
    7 F6 {! e+ x0 b( I+ c. p' k
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);; [! E% }( y* [6 R* N. W

    ( j- S) ~9 q2 B* K6 M" }& B( S3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded0 y; E' t* C* i( Y' _1 C5 G% b2 p

    - f5 Z, x% e* Q' C* y4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用1 i  g+ ~" ?4 x# _9 |) h

    " B3 i) v* R- u' ^[backcolor=white !important][size=1em]JavaScript code( m! p7 L% w$ T! m
    [color=white !important][size=1em]?

      c2 m4 n. R5 S0 J3 y
    [size=1em]1
    $ n3 O+ c8 P/ K* I9 Y4 E
    [size=1em]2
    9 N/ l& \! Q* ]8 [3 e( n# P- g
    [size=1em]3
    % B* `3 p% v8 A) d" k
    [size=1em]4
    ; K4 D( p9 z5 `( G% ^, ]
    [size=1em]5

    3 X1 @7 U1 S. M% J+ v" ?0 D
    [size=1em]6

    3 Z0 _7 D8 S2 e& U
    [size=1em]7
    0 ^: c* o7 N& G* X' J# I
    [size=1em]8
    ' F' _+ [  T! Y3 e4 W
    [size=1em]9

    3 w2 m: N) t) v/ u- U" l: G& y$ s. j
    [size=1em]10

    + m9 W  S# o9 X( N7 o! h
    [size=1em]11

    3 ?$ q# A: _  u- q6 X  x  V1 X* i
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");" \2 n* `+ F( l9 P: f
    [size=1em]      xhr.open('get', 'index.html', true);
    # ^9 u/ a7 d* a: H[size=1em]      xhr.onreadystatechange = function () {
    5 v4 T" S  N6 G( p2 w[size=1em]          if (4 == xhr.readyState) {+ L: f- G+ A" T3 C. b# L
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    * p) J: w: x( K4 \/ Z7 c- |[size=1em]                  //=========正常返回后的处理代码
    + i; K( D9 |+ n& N7 R% g9 _0 Q# C[size=1em]              }
    ) i7 I% s+ _! W1 Z1 B! p+ Q. r( e[size=1em]              else alert('动态页出问题了~~');) r3 `% G; j9 `+ C2 J1 a. V( [
    [size=1em]          }; Y2 Y9 t" F) e/ F
    [size=1em]      }
    0 p# [' m3 p% d3 h3 T; y. F! U[size=1em]      xhr.send(null);
    1 Z# i; H2 q' }% Q5 }
    ; L9 a4 B! S+ ]; a
    5 ^4 h9 f5 t( G$ X; \# _

    8 ~" z0 ^2 a; L8 i& a" ~: m) e: h
    , u  E2 q5 {0 A! o' @* e9 A
    7 q" s8 O( W! [, b2 y, @- P( a3 K# u, u4 {: B

    3 Y: P+ W  b) E8 ?5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    : q* O% }& J4 l/ o) b如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。" E6 P" r9 x3 I3 o0 T- P% h
    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, 2026-4-16 22:36 , Processed in 0.436131 second(s), 54 queries .

    回顶部