QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1859|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。; U4 ]+ c( |* L

    8 ~4 z6 |6 s# W7 @; S4 w& `% n  下面是ajax对象的一些常用属性,事件和方法  I: M8 E/ t  M) V
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML! b: ~! ~" d& `4 }. s! ~% a
    * B3 f% C  L4 }* w" J$ b1 {% }
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  . W! l2 r# S) b; q) a/ p* }
    [backcolor=white !important][size=1em]Visual Basic code
    0 q; Z0 |2 f, n$ ~5 p# j
    [color=white !important][size=1em]?
    ' l" m( G. n& z/ W; p/ c+ V
    [size=1em]1
    9 U. B! D+ O  ?: f/ [) Z( E1 W
    [size=1em]2
    / G: I: [- S$ L" c& u- G
    [size=1em]3
    & P9 k# ~" Z4 o  W( k$ A
    [size=1em]4
    + ]: m0 o5 ~. ]- h' j' s" R
    [size=1em]5

    ( X9 h+ g4 K. m' w* k
    [size=1em]6
    % X8 }* w+ P1 c/ m" D. s$ L* U
    [size=1em]7
    " c- a$ E8 s, L( n  m( v, X+ X
    [size=1em]8
    $ g8 i6 l! c& Q( T4 w
    [size=1em]9

    1 Q; [. Y4 O/ b% R! l- [
    [size=1em]10

    : a! [! X& g' K) E5 O
    [size=1em]11
    ) p, F$ T. O) M( [
    [size=1em]12
    9 S" _$ t0 y1 y( z/ @
    [size=1em]13

    0 H8 M% S/ @" v0 D# ]
    [size=1em]14

    9 p0 Z4 l. O! O
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串$ Q/ ~( e9 s3 M3 X& V, t% t- d
    [size=1em]     strreturn = ""
    # D* t2 I! {# m3 `0 S/ V& F0 D[size=1em]     for i = 1 to lenb(vin)
    6 |2 a) F2 A  [: x" U5 u[size=1em]     thischarcode = ascb(midb(vin,i,1))4 \8 h" A  X8 i1 J1 a7 d- d' F
    [size=1em]     if thischarcode < &h80 then7 n  n. I5 z3 D# m
    [size=1em]        strreturn = strreturn & chr(thischarcode). l" W3 g, ]/ Q0 t* F' N
    [size=1em]     else
    1 [1 X: @& |- G& D[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))* K- T+ A8 B: T- k* y3 Z. r; b1 K
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    ( l  @) L, E9 Y" x" A1 ~& X5 d& }" R[size=1em]        i = i + 1' i3 G7 E3 \% [9 m- E
    [size=1em]     end if5 T, H7 J7 D0 n
    [size=1em]     next
    2 q6 ~! l# y1 d! O[size=1em]     Bytes2BStr = strreturn, k0 y* s$ b) n# ~. F4 O# l% A
    [size=1em]End Function) q' p" A9 w: ^; `: d8 I

    6 O7 {- Y9 ?2 k( K

    " u  P9 O4 ~: `1 M2 o, n: s
    2 r2 x$ N3 g2 l6 }
    , F6 Q' }: M! t; N
    . w. ?; b, s- p; a% H4 a, L) G0 ?+ y+ u
      3)事件onreadystatechange,状态转换函数
    2 ?, H5 ~  b$ F* D( j0 l/ w1 L
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。8 O0 ?' _! X( @5 Z4 Z9 K. H
    参考
    9 X! J  s) E0 Y. x0 l# Yajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容7 n% S" V0 k4 h$ \1 W3 K% p( s5 r' b
    + k% I5 ?& a! R, f$ x
      容易出现错误的问题
    + {( _" u8 z' \* Q( N1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。' M0 Y3 O1 c2 }+ o5 t  h

    / r( b; |3 u3 N- o! v" f0 d6 ^2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写" k  Z8 X1 Z  Z( p" Q2 U

    + i3 p5 O4 C- X2 ?$ S) X3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写; X% G' a' u, o2 T; Q  e7 n

    # A# H7 ?: z0 {# |2 u4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    # e! I1 G) E" v0 I% D$ A* N8 r  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    1 N5 k- O, Q! N. `9 E& _1 |
    & [! ~! S, }5 k$ W9 o) @  对于手写ajax代码一些建议
    3 ^( @9 _. Y( r' ~- N! F1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    ! F/ N( m% `% i) W& k参考webservice json
    1 }* t' N& L% z3 `3 [6 e& H2 Q; n# p. f) y0 T
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);! A% K& ~7 I& c: o' R

    8 x, i2 B; y- m, F3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded( J( b+ K" ~( l) M, c: R: m
    $ l1 y4 Y& C# V6 p, T
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    " Y& n# K3 B% a& c2 [, y& y) v$ J1 O% r7 V) Z1 B7 C
    [backcolor=white !important][size=1em]JavaScript code$ Q# u8 _& L1 A% y% q7 x; g+ `
    [color=white !important][size=1em]?
    6 H$ v) P! g) l& r1 y8 J
    [size=1em]1

    6 b8 o% P* }) f' p& G
    [size=1em]2
    3 w- U8 y9 O1 S) q( o
    [size=1em]3

    2 _  ]* `* K3 R( n9 A
    [size=1em]4

    " A! H) b; L  d
    [size=1em]5
    1 ^3 G' P2 W3 y# B1 n
    [size=1em]6

    - k  l# z, }0 H6 k
    [size=1em]7

    " |, u% M& f' X  l
    [size=1em]8
    2 r: k# }) X) v& O
    [size=1em]9
    . |1 F  w; d: R( B
    [size=1em]10
    ) u* ~; v6 m: R# u# b
    [size=1em]11

    ; |4 q9 Y9 B6 q
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    3 X' h( W7 z6 [0 c4 ^! B% D; k[size=1em]      xhr.open('get', 'index.html', true);7 Z: U# [  J" b
    [size=1em]      xhr.onreadystatechange = function () {% b4 Z4 E' a0 s; ^7 V
    [size=1em]          if (4 == xhr.readyState) {
    . p9 P+ s: Z  O; x5 ~. b$ {  ~[size=1em]              if (200 == xhr.status || 0 == xhr.status) {4 _- U  h4 u( m- ?3 F* T, m8 \, a
    [size=1em]                  //=========正常返回后的处理代码* G5 t# Y: G9 E/ _1 _* j' k
    [size=1em]              }1 _* `, K+ G/ y+ G1 s0 j9 o, ]6 u
    [size=1em]              else alert('动态页出问题了~~');
    4 T% f* n0 \: K, Z  a2 t" f[size=1em]          }7 K1 S$ `0 F& V
    [size=1em]      }
    3 P6 c+ H/ _1 z: K& k1 N- b[size=1em]      xhr.send(null);
    * B: U# C5 T" L9 v  W) E. g+ U
    8 A$ s: c2 w& H) R4 a+ |

    3 ~; W/ d- \8 P' Z
    1 \, D; R) Q( [: J# n8 X
    5 }  h: E; }* Q9 b4 u- ?" ]3 ^9 H7 }' f! ?0 D$ q+ ]& n

    # ~$ D8 D; ^5 Z( T6 U2 }( M5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。/ q$ A& q) ?  W9 ]
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    % d9 e8 j* G& M+ C2 r$ M
    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-5-27 07:17 , Processed in 0.426044 second(s), 56 queries .

    回顶部