QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1830|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。* ^2 L- `* f: i/ ^5 ]$ C- s
    - D) @. X* k$ a6 @: c
      下面是ajax对象的一些常用属性,事件和方法
    ' i5 q3 G6 b8 p2 z. ~" v' S2 t  1)标准的ajax对象的属性有readyState,status,responseText,responseXML( }% H8 i  \/ B! S. F" r0 F
    ; E  L+ J  @, T
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  " `+ _* C  w+ T4 @" k
    [backcolor=white !important][size=1em]Visual Basic code+ J* D% L, |$ V
    [color=white !important][size=1em]?
    $ \! F2 L, A8 f$ P" U
    [size=1em]1
    $ ~1 v, q$ R$ ]: p2 }
    [size=1em]2

    ) P2 @6 |- `, u7 N2 N9 T
    [size=1em]3

    " E. u9 r! i( N0 W% o, _
    [size=1em]4

    & e2 J; {: p; ~7 L# x
    [size=1em]5
    ' V# H3 W+ o2 H" o) S
    [size=1em]6
    8 u1 V1 I9 U2 j* `/ F( a
    [size=1em]7

    " g: [/ N8 W; a9 q8 z
    [size=1em]8

    , c+ `7 Z7 Z* l4 |
    [size=1em]9

    ; t3 [3 Q3 \5 @) L9 H3 i
    [size=1em]10
    8 U) }0 Q! K  t+ n" }3 X+ M9 m5 b
    [size=1em]11

    . b8 o: O# J% d: T  {
    [size=1em]12
    6 V; Y' i" P" c9 F
    [size=1em]13

    % m& f6 x7 [2 |, F
    [size=1em]14
    5 u' s; N1 V4 t. `8 X9 [% K8 ^
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串, G, s9 u- L! Q( b' N( l2 u2 h" m
    [size=1em]     strreturn = ""
    8 w# e0 p- l3 y8 e+ G- z+ G[size=1em]     for i = 1 to lenb(vin)
    ! f( k; p: V3 M3 G+ t$ `5 N5 F& A# N[size=1em]     thischarcode = ascb(midb(vin,i,1))  e5 `& }. z- \1 ]
    [size=1em]     if thischarcode < &h80 then4 [) N0 D. ^6 n, K6 \1 u) e, ~, x
    [size=1em]        strreturn = strreturn & chr(thischarcode)
    $ Y* r  r5 Y4 g: q- w' W% Z* Q[size=1em]     else
    0 |. g: s/ m4 N( e6 F: {* n5 U[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))6 \2 p. B) Q/ \8 j! o
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    % {2 k9 x  x! T. B  u$ P[size=1em]        i = i + 1
    ; ^% E0 p) X. C% ]9 A[size=1em]     end if: Q7 j, x2 ^1 d
    [size=1em]     next
    ! M0 L/ I  O( p$ I% @  x; [[size=1em]     Bytes2BStr = strreturn6 E; F. u7 O% Z
    [size=1em]End Function! ?$ ^! ^0 U5 n& ~
      y5 `+ s1 e: L2 h
    / [. A* M: d1 P
    : G# i- g2 N5 v3 W- A) N% U$ W1 H5 K% p
    % n, Q" f- ?; W  G2 A8 R. c4 m
    4 Q3 t9 O8 }/ A0 t
    . N  V  [5 S8 j- a  L1 s: a7 Z
      3)事件onreadystatechange,状态转换函数1 u: j* g8 X. U" i
    " Y; ]8 V* H. ^; t2 ?6 s
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。3 L6 Q# _& N& A
    参考
    0 G+ N! X1 s. w$ Wajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    " ~' M+ c7 P( E5 A; T0 f0 F. [
    : Y1 d/ r- Y) z3 T& {) s  容易出现错误的问题
    * G6 Z% I: n; i+ s" y6 L1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。5 ?' y4 e* H' m( E; R; d* @
    : t& o; A  P" }! i- M" d# f
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    , a: d9 r9 M% w1 ^
    # ^. E$ a/ \, Z7 k$ J- C7 ~" x3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写9 \6 {2 C  p- V' i* x% z* Q* _# w
    0 S! k1 k( q. J; A5 P
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。; i1 d- {2 q7 S7 g* }* L8 ~" i  v
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    $ D; k: ]8 k( F& @- }6 a; w- ^& A" G& b3 v: `4 S# A$ K9 O# P4 u
      对于手写ajax代码一些建议
    ' E& [9 n/ R' [1 ]1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    , P3 m1 O4 E( O4 W3 B3 l' Q参考webservice json
    . `/ J5 Y2 B; {' g" Q
    * ]# N% o: N; z" k2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    % p& S* p; _$ T* r) C( `# ?/ M9 a# o9 i2 X" r
    # k  w2 J/ |4 ]3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded* p5 l) ~) \/ E  f) L: s9 l  p
    % M* G6 B9 X' \( i1 a- k4 B2 ^
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    7 M! C9 y! q. F2 q1 X1 Y# ]6 Y" N! t6 [. _, g
    [backcolor=white !important][size=1em]JavaScript code
    , S) |$ b8 S0 O: _7 j* }" k2 Z5 m: K
    [color=white !important][size=1em]?

    8 e9 p0 I' F0 x4 y5 H/ _2 X; g7 O' @$ R
    [size=1em]1
    6 n9 L9 C( j9 ]* i% T( a
    [size=1em]2

    3 |6 B* Y- t/ W( ^7 A
    [size=1em]3
      Q% o9 C* I- c( b
    [size=1em]4
    ; S' J! h: @! Y2 Y
    [size=1em]5
    / o# z0 |, r" ^+ Q; s
    [size=1em]6
    . I; l8 e1 Y& ^
    [size=1em]7
    ! \4 W. n) o- l' u
    [size=1em]8
    ! L0 }! M' G1 ?8 @: i5 c8 }1 v. w: ~
    [size=1em]9
    6 V/ n9 ^% P' ^
    [size=1em]10
      E$ \0 G5 F  ?
    [size=1em]11

    2 O1 l4 _6 k& }3 h! _& s
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");: Y- X! D) G5 }5 E6 I$ t1 ^5 w/ u$ r9 ?
    [size=1em]      xhr.open('get', 'index.html', true);$ J  x4 y0 `' Q7 w; e3 T
    [size=1em]      xhr.onreadystatechange = function () {/ M) S6 A  L4 M& m1 {3 I3 n
    [size=1em]          if (4 == xhr.readyState) {$ d+ V; ~, @1 z7 J
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {$ ?9 H( K2 n: B, ?
    [size=1em]                  //=========正常返回后的处理代码
    ! x4 S$ Q8 k; c0 e[size=1em]              }
    3 O! z& _4 `7 M# L[size=1em]              else alert('动态页出问题了~~');
    " k$ m& S# E& E1 M[size=1em]          }
      M$ U1 A4 d7 t$ L[size=1em]      }
    / `4 U+ j2 u+ @3 w4 G8 M[size=1em]      xhr.send(null);8 b: R' a* U. i( \
    0 K; @7 T* i& C+ {

    4 ~  J9 q4 A/ C
    : S# s1 l4 }( U: F3 o7 C- n
    , a. O) w. u) c4 J' k6 j
    & ]; W  u2 c) f! q: }+ x3 z+ r' n* V$ r* R) h) t
    2 y2 ^4 [4 J2 d, r* o6 v
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。0 [, K: L! W2 l8 d& E
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    ' U# o* F2 s) w5 K& l
    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-4-10 18:14 , Processed in 0.326761 second(s), 54 queries .

    回顶部