QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1931|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。. w$ r# `" P# J3 x
    ! C$ J. u0 f2 C/ k. M
      下面是ajax对象的一些常用属性,事件和方法( _8 [) d- f8 s3 Z$ y7 u1 }
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML- u3 c9 d# y. Y. E3 L) D! ~  _
    2 x7 X' F! c! u! ]
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    " G0 e& q% M  [[backcolor=white !important][size=1em]Visual Basic code
    / L, {7 F; o% C/ C3 w; U
    [color=white !important][size=1em]?
    , _2 u8 m1 p) p7 V& s
    [size=1em]1

    7 w8 d0 r$ x  G4 {$ \& e
    [size=1em]2
    ) F8 p! q: f6 L! Q$ o, Z% @0 g4 z
    [size=1em]3

    ) T9 K& X( Q; d
    [size=1em]4

    % [( x* r/ b2 [2 }6 M
    [size=1em]5
    ; f0 w5 K) m8 f
    [size=1em]6
    3 ^1 T. t! L9 [+ H, ^0 A5 h/ p
    [size=1em]7
    $ i2 a% H0 K# Z( w
    [size=1em]8

    ( Y5 R' d# l7 C# N* Z. r& q
    [size=1em]9

    ! ]' z1 S) A5 Y8 f7 c9 {; c$ p
    [size=1em]10

    5 F' g7 o2 S- [( }/ o5 d
    [size=1em]11

    0 M7 A/ R* u! B$ _$ m0 ^& W
    [size=1em]12

    % a; v4 _" a  b- Z5 w0 n
    [size=1em]13
    # q0 M' m8 l) u" n0 ^$ F& W) [
    [size=1em]14

    8 `. q* _& B( e
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串- Q- k" K, K$ E1 u' }% O0 U! b0 P9 M
    [size=1em]     strreturn = ""
    . s2 q5 E  }4 }& `7 D6 K9 u[size=1em]     for i = 1 to lenb(vin)5 L1 o. h! h% W+ W+ l
    [size=1em]     thischarcode = ascb(midb(vin,i,1))5 E) D3 [( Z7 M
    [size=1em]     if thischarcode < &h80 then6 ~* R5 c* o7 Q: ?+ c
    [size=1em]        strreturn = strreturn & chr(thischarcode)
    & F6 J  P) }. X[size=1em]     else
    ' @  y; v$ ?- c' b[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))
    $ G' O  ^9 l3 ^- W! o  K) R6 Z[size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    , s5 B% m5 n9 s. v) c: j# N[size=1em]        i = i + 1
    * B: U: v, A  I[size=1em]     end if
    6 d7 s+ c2 g. {. v9 \[size=1em]     next$ Y/ r; j; c; a  s2 t' E- Y6 Q9 [4 x
    [size=1em]     Bytes2BStr = strreturn$ C# A9 c; C3 i: I3 p: m0 u
    [size=1em]End Function
    ; s; s2 g7 F3 v% p; n4 l( x/ U' R8 O' c( B' H$ M
    7 \% F. u# |0 t: D+ u
    0 V: H7 C9 \! o% E
    9 M/ l# T' g8 W; i+ W
    9 x" J/ N9 l' z& Y% B
    ) [, H1 V/ [% H4 C
      3)事件onreadystatechange,状态转换函数
    8 \/ q$ [$ x6 g5 m) ?" g! t. y, E+ a/ t
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    6 Z7 S  k' r# c, S/ |参考- s4 R! O+ d# V
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    9 J( ~8 q9 T* ~* [
    ; m) }0 x  r/ w4 T  容易出现错误的问题
    ; ^0 F  r9 }) Y6 c1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    4 H/ i4 Y$ U. J- o. u! \% K) l1 R3 }' q0 C2 R
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写! P6 Y3 r% V2 T) P2 E# ^5 I3 V

    % y- Y) c. A1 i( ]) G# s3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写/ }) v/ }0 b& W& z  U) S' z. ]5 Z9 L

    ! b" j6 g: X2 O( g2 I4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。$ I( Y9 P6 y; f# n9 U7 }; W. ~* G
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。9 ?9 L  u3 L+ L

    ) g% a* {- Y/ |" ]) W$ Y0 T  对于手写ajax代码一些建议0 |0 p7 p3 l4 H
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    ! ]" U9 G, O5 ~7 C5 A9 T( P5 c6 [5 l参考webservice json
    ) q  i- M4 r$ V1 c" N
    : m; z% `% \- s5 _& a5 U2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    ( j) G! X. l5 d; c2 O  ^/ o+ Z) ]7 x( P$ `
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded* F3 }) v* K& p/ X( ]1 F6 [
    % \  F1 g* R/ X" h7 Y, m
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    . p% L4 h5 R  E0 x/ p; @! E0 B8 w2 h' X& J9 k) ?( j5 E
    [backcolor=white !important][size=1em]JavaScript code
    + N" Y# p* O# q( n  ?
    [color=white !important][size=1em]?

    7 x6 X7 t( y: F6 Z3 |
    [size=1em]1

    + V) F( p  _; m  g  I' c* x. H  u
    [size=1em]2
      d# x7 S- T& q( Z# u: b% ?9 |
    [size=1em]3

    1 {5 G( h  m: p7 Y! O% R
    [size=1em]4

    5 m* l$ T( v9 e1 W( u* T. p
    [size=1em]5

    " R: t- u6 M. ~" u& i& `% A" o5 p
    [size=1em]6
    ; ~: P" K/ S7 C6 F$ F0 ]# M
    [size=1em]7
    , s2 P1 e" Y  ]+ X- M4 W
    [size=1em]8
    ' H6 I: R" R8 G, f3 l; ~3 u
    [size=1em]9
    $ U5 a% V! o! X6 o! I- L
    [size=1em]10

    0 d6 U8 V( n' G: I
    [size=1em]11
    / W" I4 w3 |1 P) Z
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    ' i' C8 s+ m! [3 f% o[size=1em]      xhr.open('get', 'index.html', true);
    $ e7 X1 K4 N7 O7 [8 d8 o[size=1em]      xhr.onreadystatechange = function () {
    0 ?! p% V* h; ?( p9 Q1 v4 I8 N[size=1em]          if (4 == xhr.readyState) {, c1 b3 x. b1 R' ^4 c  E
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {4 r0 c# I. n/ I( K& n1 r
    [size=1em]                  //=========正常返回后的处理代码
    4 z4 O& R2 K, |$ w[size=1em]              }
    " O$ x. h- z5 z& H: W+ R[size=1em]              else alert('动态页出问题了~~');
    ' `9 U1 ~; X5 R- s8 q% S# l[size=1em]          }. H# |0 c* b, B6 O4 M" R# t  q6 T
    [size=1em]      }, H- D9 I8 \5 z2 Y: \
    [size=1em]      xhr.send(null);: K4 \  C5 D6 r
    0 R& _) V+ V7 f' F3 ^

    " p$ h- W' P. D, @9 Q% a% U
    2 @. Q# r/ N7 v( H2 h( U6 C6 X0 N- S- y
    & ^5 _0 R2 K8 V8 K3 e" f' q6 w' o
    ( x* P5 F" P2 {4 |0 x( P" G' b: Z+ V8 L) H' c
    & Z4 k$ n& Z( W5 p6 H1 H
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    ! _0 M( X6 d# p, c如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。, F( e2 j: g& m& m9 ~' z
    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-9-1 04:19 , Processed in 0.556692 second(s), 52 queries .

    回顶部