QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1877|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。9 o8 F, u# j9 V  ]8 x* k

    5 |+ g. @' M3 P2 |8 t  下面是ajax对象的一些常用属性,事件和方法
    " E- x! z& C+ Z3 s  1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    1 F9 [& o! b/ a; C2 \* [
    5 t* k2 i. p: J1 i  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  3 A: l& R; z2 f: C
    [backcolor=white !important][size=1em]Visual Basic code
    9 M2 V/ O  h$ }4 v" m3 t
    [color=white !important][size=1em]?

    % e( o2 M/ U* [
    [size=1em]1
    " Q, d+ {" J) w* T/ _! O3 g+ C& D
    [size=1em]2
    8 h. @/ C+ O+ {% t+ r5 x7 M
    [size=1em]3

    2 o) [' ^6 k  k, r$ c3 c0 e( R
    [size=1em]4

    % z. D6 S! {# f& \9 q( f$ Z
    [size=1em]5

    - O/ ~- {. ~; F- _
    [size=1em]6
      W) I9 @8 e* n
    [size=1em]7
    & J. c  J$ P0 B) k5 l
    [size=1em]8

    ' w, }; ]$ {! f, l8 u
    [size=1em]9
    : n% o3 z1 M+ U* f
    [size=1em]10
    * u/ V! ]/ z3 c8 o
    [size=1em]11
    , A2 G1 b# s% D+ i7 i" T& A( Z
    [size=1em]12
    , b. ]. j1 ]' r
    [size=1em]13

    0 ^/ ?" A, Q6 Z5 Y" ^& @, E
    [size=1em]14
    , q0 \# v* d7 [  v
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串* I2 ]0 b, F% ]: Y/ z
    [size=1em]     strreturn = ""9 M4 {5 k6 J  w- ~: R
    [size=1em]     for i = 1 to lenb(vin)+ ?( t- s* Z4 t( g7 {3 n
    [size=1em]     thischarcode = ascb(midb(vin,i,1))1 T5 ~9 `$ w8 T- [" W0 r
    [size=1em]     if thischarcode < &h80 then
    3 h+ V) D' X  W. [& a) s[size=1em]        strreturn = strreturn & chr(thischarcode)
    7 j( M: T- N* V[size=1em]     else
    4 }# b: j, M. i( n& X! D/ G! k[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))5 |4 v% q' z# Z& D4 C
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    5 g" ~" r* V8 J" b2 M[size=1em]        i = i + 15 {! D4 I: X7 ?, |- m8 I
    [size=1em]     end if, f( l' M! x" O* y
    [size=1em]     next" c1 @$ [( P, A' J+ s8 w/ l* J
    [size=1em]     Bytes2BStr = strreturn
    * w& E" c; ~/ \6 h" G# [- v: q# v[size=1em]End Function
    . V  e+ S- [  ?
    / k- p+ g6 E* p

      v1 c, D0 ^( U3 U* i
    4 h/ `/ a' X& W0 e4 T
    7 z* W, |' d6 T2 a: f
    0 C( I& \2 L# g  [0 u) V1 i1 ^+ z
    ' c' t9 N% |, g- P) s9 T  3)事件onreadystatechange,状态转换函数. \- e) |6 X! I* ^! ?8 f

    % M, y( ~8 b- x  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    . X. ]6 `* e8 @3 D% Q! ^1 Q& I' }3 J参考+ h  C2 e4 b3 t. ^; B
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    2 [' j0 k% s. ?, N9 ^8 S
    & L, t+ N$ R9 n+ M3 A$ F6 K5 u  容易出现错误的问题
    7 w" k$ {  T! Q& g: n% k9 O1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    $ Y$ r1 [: m! U/ z8 u1 w: k+ J
    ) i' y* b0 G7 a* P0 _( N) z2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    2 Z( L( M! t' ^$ k  z3 T: }" h: A1 z" _' G2 S- R
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写1 m6 U8 Y$ @# F8 |% o# e

    * U) M) ^5 D2 b2 \4 [. J0 u4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    4 z/ v1 e/ m. `$ |7 Y  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    : T0 V% {7 l! h1 R$ N
    : V2 `+ C; o. E. D$ ?, s" {1 f) G  对于手写ajax代码一些建议7 z  A6 c% t6 r6 C$ P/ X% R
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。7 [. ]$ @2 O5 b
    参考webservice json
    - ]: R, H, p, w3 i, w, }/ {
    ! Y# ]" D9 o9 Z) Q. R* _) f, M2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);5 g; z# G6 a' F
    ' Y7 x3 c5 b9 |7 p+ {% `0 d
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    ( R) i1 d. }! }" T. _( k4 Q; k  E5 r- i
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    1 _( n1 v9 p" x2 G3 P+ H: m3 L' }* f& ~0 p: Y4 f
    [backcolor=white !important][size=1em]JavaScript code
    4 ?6 j' c7 m  z: ]& J5 h
    [color=white !important][size=1em]?

    1 z3 d8 z0 Z/ f4 w' P- B! n6 t* V. h3 H
    [size=1em]1

    ; w$ ?6 c/ a% l- |
    [size=1em]2
    ' Y* c, {, b& B+ P7 F' M0 i. [) T
    [size=1em]3
    9 ?- f  r" t. q
    [size=1em]4

    8 x2 e( L' @4 A! c
    [size=1em]5

    0 ^+ s) S+ ]" [  m" y
    [size=1em]6
    0 J$ ~5 g+ w! {. v: N* G
    [size=1em]7

    ) a) F6 S9 L9 K: n; y3 X1 W
    [size=1em]8
    / E! {) K& L2 }
    [size=1em]9
    7 y' ?* K* U# k4 Q
    [size=1em]10
    * d) t# {- B; M7 S3 l" Y/ b
    [size=1em]11
    % t* V* U  j3 g) g
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");( q3 Y$ s8 A) C' P5 l8 D8 q
    [size=1em]      xhr.open('get', 'index.html', true);
    3 ~' H) H7 O2 o' T9 `[size=1em]      xhr.onreadystatechange = function () {
    ' \0 J9 d7 k' i9 Y6 _0 ?6 B7 ~  W[size=1em]          if (4 == xhr.readyState) {: H1 `2 t9 ]* B8 E
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    9 K" v, A4 L8 Z9 V. @9 J[size=1em]                  //=========正常返回后的处理代码& g8 }8 f3 S+ J3 j$ {
    [size=1em]              }
    . ?; J  N  k/ Z[size=1em]              else alert('动态页出问题了~~');
    # o: F2 p  P! v[size=1em]          }5 ?- Y% T: I( Q& S
    [size=1em]      }6 q3 ?9 G) C) E5 p% ?  ?1 N% {
    [size=1em]      xhr.send(null);
    , x& c! l' ]$ |' x2 O) Z! n) R- l& J" ]

    9 |3 ^& {/ g1 |( j1 T, E+ x7 N) N) p9 x! p! E
    ! m1 U% z8 R7 Y

    ) q) |- v  ?: ~
    ) M* r6 m! T  y/ p" |3 E0 O
    2 d; k6 Z4 ], `. Y; g. {% M5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    ! f" }8 a* ~0 ~& c) Y如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
      e5 @) j$ I( b+ M( ~% R  C
    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-7-9 16:00 , Processed in 0.824747 second(s), 54 queries .

    回顶部