QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2021|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
      c( [4 f2 U3 E( O1 j/ r
    * E7 w+ m' A) U# y, s& |6 _  下面是ajax对象的一些常用属性,事件和方法9 J* }+ v+ g$ K
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    - w" [2 s" I" X& x" d$ r# |) E9 g5 A! [- ~8 H0 {+ f
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    ; L5 |6 y+ k) i" ?, L9 a[backcolor=white !important][size=1em]Visual Basic code
    ! s& H& i& l& [( J
    [color=white !important][size=1em]?

    " {. {/ c, n! {3 W
    [size=1em]1
    & U' O' c9 S. j7 W! k1 t4 ^
    [size=1em]2
    % @9 I) |; n) E7 b
    [size=1em]3
    & Y! K& s7 J3 H* {9 P+ z7 f
    [size=1em]4
    8 U& e5 ]* R9 ?  \: p* y8 V; z
    [size=1em]5
    ; b) o/ X8 P* K7 i& ~7 P4 _
    [size=1em]6
    : W1 [" g5 E  S
    [size=1em]7
    3 ~, ?, _3 r5 v0 L; |
    [size=1em]8
    " D4 }6 u1 D4 b0 p) O5 @  ^9 K
    [size=1em]9

    ' c5 k. t8 s7 y! U
    [size=1em]10

    4 z# m1 v# h' }5 a" o+ @
    [size=1em]11

    * M0 g$ F; \/ P& F* ^8 q
    [size=1em]12

    . e1 T0 ?# k9 C5 F
    [size=1em]13
    / G9 [- C) u  F7 K$ T5 {
    [size=1em]14

    9 A8 V* j5 a) n4 v
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串! J) Q% e) W9 {% y3 G9 r
    [size=1em]     strreturn = ""6 a! a" R; _7 W, y
    [size=1em]     for i = 1 to lenb(vin)
    0 j1 `. |. r" d) l% Y' @* i% `[size=1em]     thischarcode = ascb(midb(vin,i,1)); U  e6 M# d0 z6 ]# f
    [size=1em]     if thischarcode < &h80 then! c! D4 g) f( \% J% j
    [size=1em]        strreturn = strreturn & chr(thischarcode)$ C- \# j0 H: k0 b' h9 J+ ~
    [size=1em]     else
    ) K% D9 w  x( ^& v) j7 P+ o[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))5 z/ K+ \& u5 V/ r
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    / G+ }2 Z, K- q  g4 D( a[size=1em]        i = i + 1/ E5 ]" Y* C" u8 d0 J
    [size=1em]     end if% i7 e0 }& v: P+ s0 Y) ?
    [size=1em]     next
    , p# ^) M  m/ q3 n7 }[size=1em]     Bytes2BStr = strreturn
    * m+ Q' u8 I4 ^" Y) W[size=1em]End Function
    ' ?& c' Z* a$ v( n5 o) }5 r8 o% |  O2 w3 a1 M2 S
    * U. s) G/ I, \& B  ~

    : n8 y* t7 C3 R8 D  W, z/ a8 ^  g2 D
    ' c& o9 o+ x  D% S# w% ]

    3 P$ x$ c8 L/ |  3)事件onreadystatechange,状态转换函数/ [4 X/ g& w" B0 _

    % [. ?, Z' i# j; d$ C  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    / B) M/ i# ~; q' x9 @3 {  Y参考
    9 K& `# D9 U5 O( A, Q: k) P5 d6 O9 Jajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    / l) B+ B2 B9 }% ]: u6 o# ?
    1 c; n$ u0 s0 U; [: E6 u( C5 j0 X4 a) [  容易出现错误的问题& r: x+ j- K: ]# ]9 E' A4 p
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    - h; n+ G# Y6 h2 Y8 T& L6 L% X6 q1 i
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写/ A  q# `- y& A5 E
    7 N% a  }9 r8 N+ ^" G" p3 U
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写  P% a9 }5 F+ M, Y, H

    * C  z) `" n' [8 @. a4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    , G& s0 [, O) s, M# j( r  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。$ B$ B5 u3 s0 U6 j/ M0 G7 A

    ! r0 b5 G/ t" M3 b, b$ ?' B2 O  对于手写ajax代码一些建议
    / w0 @. @: B' t) i, g1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    # @0 Z8 Y$ u% @0 a参考webservice json
    & A0 ^. i! R7 C, v1 k' Z+ \3 A
    * W! N" h2 q  ]$ i2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);  n/ ]) K& Q# ?' Z
    ) L; C" ?2 A1 m' ^: H* e
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded- R) C, C- v- Y+ J- `' `" @$ V( B5 x1 m
    5 Y5 [; r$ y! m+ f2 X7 i
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用. R0 m4 X1 g1 {" K' z: g+ n0 F
    1 P3 f1 ^3 s! s" T+ W
    [backcolor=white !important][size=1em]JavaScript code8 u! o! r( `" G1 J0 n
    [color=white !important][size=1em]?
    " u5 l/ I0 a/ K* L8 V
    [size=1em]1
    8 {# p2 K( X7 ^  B
    [size=1em]2
    3 h; g, ?( }8 `9 A/ X! s! X
    [size=1em]3
    0 ]* Y/ i: N& ~" j) Z
    [size=1em]4

    2 M0 m6 m; m( y6 w( ?
    [size=1em]5

    1 L3 d5 W- S6 {. k
    [size=1em]6
    ; P+ U% I6 a8 W6 N( Y, m- X# y% H/ B
    [size=1em]7
    , h9 E# c, J0 D
    [size=1em]8
    9 j8 E% T' c1 ~* G) v2 m+ p
    [size=1em]9
    : W, b, W- A& S! f2 d
    [size=1em]10
    / ]+ Y% _, e; _
    [size=1em]11
    # w3 P/ [. o& k6 z5 c) I* T  \4 A  \
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    ) J; @0 q7 e& ?9 s* m) O[size=1em]      xhr.open('get', 'index.html', true);
    8 s4 j( c$ U+ p. A) ]) d: r[size=1em]      xhr.onreadystatechange = function () {
    , `9 Z* Z+ T' K7 v5 j[size=1em]          if (4 == xhr.readyState) {
    6 \. {2 a2 S+ W* y% Q' t# z[size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    ( ?: G# K: C2 U) t( W& `[size=1em]                  //=========正常返回后的处理代码2 O3 ?5 L  r. T$ }: Y
    [size=1em]              }
    2 k  e' K0 Z7 Q, w7 K[size=1em]              else alert('动态页出问题了~~');8 O+ d" O& y& m+ d. w' B- H
    [size=1em]          }/ ^' ?2 ~! ~/ i5 A8 g4 L
    [size=1em]      }% }# J$ R7 c/ n& m
    [size=1em]      xhr.send(null);: N: s* h- ~( _( n) S- \# H: K
    . d% n2 K" E* e# B6 r7 v7 b

    3 N6 F6 i: O4 }/ h7 a( _! e! o, y# z1 L

    0 R  ~4 }5 M& c" a* N9 l. _$ {9 y3 o2 `% P+ l

    " n# o% b! R( e$ V( M3 b2 x7 q) e9 e( P1 ~
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
      ?$ Z+ p' v! C( [如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    , e8 V6 N1 V& D
    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-10-17 08:46 , Processed in 3.210374 second(s), 54 queries .

    回顶部