QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1920|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
    + k+ Z5 m: O2 U$ P/ f! M) W- J0 T9 w" B4 n5 Y
      下面是ajax对象的一些常用属性,事件和方法" N( e9 _/ _. `& g8 F
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    $ j5 Y8 L4 t6 r7 }4 B8 V" B
    , d! N6 v8 G6 G5 _! k  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  . S0 d/ b; ~/ V) A1 u# z7 P9 v
    [backcolor=white !important][size=1em]Visual Basic code
      `8 r( a" \- w  u2 X2 o
    [color=white !important][size=1em]?
    + B: K" _* K2 K5 k* \
    [size=1em]1
    8 q+ v: j& i4 u% K
    [size=1em]2

    " B& x0 R/ Y0 |' [( ?
    [size=1em]3

    , u- |( d7 y0 Y; r- `
    [size=1em]4
    : {7 A9 w# q# ?9 y, s/ V+ N! y
    [size=1em]5

    4 Z- R3 G# E- K5 x
    [size=1em]6
    4 l8 Q1 l/ Q: y& S+ o, c1 }" P5 J
    [size=1em]7
    , Q6 \6 I6 \3 s4 ?1 ]
    [size=1em]8
    9 h" y  e5 [6 ]
    [size=1em]9
    ) B, H8 V4 ~8 J+ n; k" ^8 }
    [size=1em]10
    % @4 N3 i; i7 H5 y5 a
    [size=1em]11
    2 q' ~- Q0 B+ k6 C. L" v; b5 ~
    [size=1em]12
    ! \$ `# \/ b1 @4 X( o$ E
    [size=1em]13

    1 S% ]9 l. V$ k' y. B9 q7 G1 j! y" K
    [size=1em]14
    . i( Z& ^3 @# N5 u$ F
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串) b6 l5 B4 T; J* Y! _" Z& O. }+ z
    [size=1em]     strreturn = ""
    " [0 V* T: k, W9 ^! Z9 i$ w[size=1em]     for i = 1 to lenb(vin)
    ) K5 {: ^. z, D[size=1em]     thischarcode = ascb(midb(vin,i,1))
    7 f  ?8 h$ E& \[size=1em]     if thischarcode < &h80 then% \# ~; |/ c) S, \8 _2 S
    [size=1em]        strreturn = strreturn & chr(thischarcode)# L) E; Q9 Y- T! F- e+ V. T
    [size=1em]     else, C: R. }7 Y( \1 C, S, W! K+ f. C9 ~
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))
    , O+ t, t' c; }0 R  S( A1 C  f[size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    ' Q- ~6 \2 F- t1 u[size=1em]        i = i + 1
    ( T2 p6 s  h% h7 C9 O  W[size=1em]     end if- J4 g, f2 n0 R
    [size=1em]     next( E* Y7 O5 K$ z) \( Z9 Y3 W9 ?
    [size=1em]     Bytes2BStr = strreturn
    $ p  @$ Y7 G; c/ J* A[size=1em]End Function& c, s; X0 Q4 K. q) }- Z
    , O4 t) d% [( ?3 f9 l) g
    * F6 {0 N) O: T1 q! k. _

    2 X: S' E. y5 m: U2 z- }
    . U# r! m% O2 }: X9 Q. f* x
    4 |: }. p1 j2 r7 u* j
    ' T. U$ C; `/ Z  3)事件onreadystatechange,状态转换函数: A( A4 N/ {- o& i

    ) S3 H' @/ t  W# ?  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。( s7 Y; }% R% L# A8 h
    参考
    ( a* b( d2 o0 B* S2 P- c( ~/ @ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    ! U) O8 n8 m3 J# ?% N% z
    4 V9 |8 f! F2 z6 J0 x; ]2 W. F  容易出现错误的问题- n; G! G/ N0 U, _/ d$ N5 {
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    % L, x* V+ m5 Y' d& j* n
    7 ]/ h0 V" ^( L. a% R' Y1 o2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写! {+ e/ u, W- @# a) ]& L4 {  F

    ; ^1 ?# [- ~( D# G% @3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    9 l, `5 W( M' R5 T7 M$ `$ j7 R8 }% W- j5 q( d% S
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    : F! Q# p& {/ b8 I( U& W3 f  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    * N. o% A/ n! I( B5 I, ^* b# ?# G( V5 O# P5 N+ r/ n2 b
      对于手写ajax代码一些建议
    , x9 r7 h7 t) H1 `: d1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。( a% ]0 H  I5 e, T& k, s
    参考webservice json
    * x5 ?8 z4 ]/ F3 L# E% e% C8 f. _: E! ~$ U. h6 d2 Y8 {% d0 M
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    5 d& j6 ^  C6 @( l' L1 n- @4 F( @
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    4 p- {5 F- j, L% q: m+ V) _
    : _6 r* J: h. L) s) u4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用- c4 Q& m. ~" @1 M$ I1 m( F. \& \
    9 t) b/ H' r- ?0 A8 B* B& i, q
    [backcolor=white !important][size=1em]JavaScript code1 t0 Z2 k& }7 F3 L+ M
    [color=white !important][size=1em]?
    + ^) b. s  Z6 r/ c/ M
    [size=1em]1

    ( y% N+ L/ j5 w0 [3 \$ A: _
    [size=1em]2
    $ S) n, v. Y* w; K
    [size=1em]3
    9 Y; Z3 A; Y" b( e# I( N
    [size=1em]4

    ! o# K; ?. G. u
    [size=1em]5

    8 J, i4 p! _) D. [9 P
    [size=1em]6
    ( `6 _  _2 t. i  k
    [size=1em]7

    9 R% j$ x4 h& t
    [size=1em]8
    - [+ ?* l, |# g3 S8 U& l  i$ O+ e
    [size=1em]9

    ' S3 y! G0 N. @$ T
    [size=1em]10
    7 J3 X4 _7 U6 P' w& n) n+ n$ G
    [size=1em]11

    9 Z# ]  `1 n/ t( Y
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    - V2 A1 e3 V  i3 d7 d" t[size=1em]      xhr.open('get', 'index.html', true);
    + N6 ^# h( L! _9 D0 s) p3 |[size=1em]      xhr.onreadystatechange = function () {. Z8 X' t( O/ g6 k7 K& L: V+ s" ?
    [size=1em]          if (4 == xhr.readyState) {8 }/ K% l% V  {8 d$ h+ I, k& R
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {* h, ~/ ]5 |1 q; M1 B# D
    [size=1em]                  //=========正常返回后的处理代码
    / S/ p$ X6 Q1 i% y4 R3 }4 z' @[size=1em]              }, o9 w8 |4 F( k( _$ v5 n4 u
    [size=1em]              else alert('动态页出问题了~~');
    ' v5 K# |$ L) \8 y$ g[size=1em]          }3 K! r) Y$ B- a+ p1 T
    [size=1em]      }) `9 Y, `) k, Z6 {! K! Z8 Z! j
    [size=1em]      xhr.send(null);
    ( A, _) Y3 E7 y8 k4 s( d
    $ \7 N) {/ ^2 A4 [( n& R4 t
    * {: i1 ?# f0 l3 s2 u7 R
    , ?( r4 d' Z) T- P1 T

    # n7 P0 D2 s+ b! `& q7 M0 n1 w7 l  [* Q$ H* s! k+ J
    0 C! l. V4 w: C* r4 q

    : X+ _# j! W; `, a# G- L5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。# d4 C: l1 c* C
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。4 v: B( _# `, Y8 c" J" N
    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-8-23 20:31 , Processed in 0.460607 second(s), 54 queries .

    回顶部