QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1928|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。) x; n$ I9 m/ E0 c' c  X) p# _

    & ?3 S7 x, A4 v" e  下面是ajax对象的一些常用属性,事件和方法
    " m6 T) C' o4 d/ }1 P9 B5 ~( W  1)标准的ajax对象的属性有readyState,status,responseText,responseXML& _) c' q$ ^4 J' @

    6 q- J* p3 O9 |' k  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    2 c! g( [6 T) Z8 m" w[backcolor=white !important][size=1em]Visual Basic code
    ! c0 r. S% E, x- j7 N& ~
    [color=white !important][size=1em]?

    6 X6 S2 B  ?$ Z( p
    [size=1em]1
    . s+ c2 w6 w: N# j. E/ z& L0 @5 C
    [size=1em]2
    2 t0 B6 Q3 @# n/ c- a2 O
    [size=1em]3

    : u* N9 w4 h" e6 _! f! |. p& R
    [size=1em]4

    , r6 o% c$ G% C1 K: G: _0 n
    [size=1em]5

    # y! _$ S! q$ t( @' b  w0 s
    [size=1em]6
    9 L$ L; V5 [" D) u
    [size=1em]7
    + z8 z5 C% Q2 n
    [size=1em]8
    ) N, p$ O1 A4 P9 x; l
    [size=1em]9

    ( C" f# P+ i% r/ L0 f8 y
    [size=1em]10

    4 B3 G& a9 D9 R
    [size=1em]11

    ; z/ Y! n- D) z* N" e
    [size=1em]12
    & t1 \- R; V1 \- }$ L
    [size=1em]13

    # D& a! e2 Y, t0 C" v( K+ ~, `0 p
    [size=1em]14
    ' G" J! S& _- [& s2 D4 z7 E
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串3 L5 \' A5 Z9 m& }7 s5 ?: K% M. ]. _8 r9 z
    [size=1em]     strreturn = ""5 G$ k4 ]) P2 s  w) U' B
    [size=1em]     for i = 1 to lenb(vin)
    * l/ X8 q, S- a, [3 b& f[size=1em]     thischarcode = ascb(midb(vin,i,1))& N( N6 v* f4 ]; N$ X% k
    [size=1em]     if thischarcode < &h80 then
    ' o/ Y5 R, z  M5 |1 A# v7 f$ k[size=1em]        strreturn = strreturn & chr(thischarcode)
    3 P" B3 O2 m7 @[size=1em]     else
      E- p* k1 R3 I, @" B[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))0 G" C7 r' b, E+ m3 Z  X, h) l+ z
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))2 ], ?' E4 P% Q2 b" [. H( F
    [size=1em]        i = i + 1
    * z/ b4 y; G& V2 P) y[size=1em]     end if
    ! ~! t, d- F! N& R7 {[size=1em]     next
    " A7 I) K7 ^1 Q& k) D! [/ D7 V[size=1em]     Bytes2BStr = strreturn
    8 v  ~# G1 o, Q[size=1em]End Function5 C+ w  x( ^; C0 O, ^
    8 {2 d+ ]" y6 z# [3 P
    , Y" {) k7 u1 X, x% `0 Y! ~
    8 O* @5 l6 a4 u, F- c8 N* |% k2 F$ ^
    ' S8 T6 Y: }! J% S; a
    " s( D6 y, ?3 q

    $ U( p9 I8 r3 H2 F8 d. `  3)事件onreadystatechange,状态转换函数
      H/ u. V2 @- D6 _) S# t+ y7 y  p+ n2 Z1 d3 X3 B
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。9 u( K- n7 _2 _* f
    参考/ I% S2 f, Z9 R7 M8 D% x4 `. d
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容$ I" a3 y* D% N, y
    % D: h. s+ _- S+ c) V
      容易出现错误的问题
    1 d. q5 T2 W# X3 ~# U$ X2 T: w; H1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。: U7 C3 W  M9 }. Q

    8 d6 D8 @" o" I: W2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    3 ~% F2 b! f, ^3 T/ n# x; `" K. M. O
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    3 Q' K9 Y" f; ^: e% m' K9 k* O2 g7 y+ U: V$ s( |% L2 J5 \- P
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    / {" _/ f# i! L6 m6 |( K  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。* M$ \4 R7 n4 f; u2 S) d

      L$ C9 o6 Y9 b0 d! C  对于手写ajax代码一些建议( j9 M$ d# J- k7 p# v$ X1 i# z
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。  V5 Q: ~! v4 v# L
    参考webservice json
    , D" `8 l6 w9 [; N5 D/ J; O1 C' r  c9 n% s1 ~: Z
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    7 c& g& z: a2 c) ^4 Q$ y4 Y3 n
    + p, B5 D$ S8 ~4 n3 B# h/ [/ B, `3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    ) {1 e, `0 W  e9 b6 w0 {# |* w4 K1 b( [4 a. O( ^$ m& d8 T
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用' h4 ~2 z2 u9 j0 |7 J* ~6 J

    2 Z7 t/ Y5 p8 J[backcolor=white !important][size=1em]JavaScript code! Q( ^5 t6 ^" B! ~( A3 m; g, m. T# Q. k- e
    [color=white !important][size=1em]?

    0 m- ]. t: \: p6 E- P. W, n/ m6 I
    [size=1em]1
    $ C: |2 c: E- C0 Q) J: C0 T3 [9 k
    [size=1em]2
    - G+ i5 @5 l3 s+ c6 t! |3 F
    [size=1em]3
    : c0 X$ h# ?  C% h3 \3 ?
    [size=1em]4
    , R+ H7 B( W& ]- o9 d" E
    [size=1em]5
    , P, |/ z* v6 Q; O
    [size=1em]6
    9 C8 c- w7 [4 G
    [size=1em]7

    ' R; P9 A% n) ?* P& @6 d
    [size=1em]8
    # Y, [% z6 Z3 |. x& H0 q8 p$ A; i
    [size=1em]9
      U6 _. H" X5 b5 W. l
    [size=1em]10
    + K( d; u* D) J% K5 D
    [size=1em]11
    4 s! R2 G4 n. O& g; h2 F
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    . Y% B; {0 h* Z" M8 M9 Q7 t[size=1em]      xhr.open('get', 'index.html', true);  @# }) J  ]( k6 h
    [size=1em]      xhr.onreadystatechange = function () {. o, i+ J1 E5 R3 a
    [size=1em]          if (4 == xhr.readyState) {* _4 E4 i$ M, U2 }( w
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    ' t0 R  ^; }5 K& t8 `: l[size=1em]                  //=========正常返回后的处理代码
    + Z, c3 v3 u: G- R7 t7 I[size=1em]              }
    # c. G' Q% a5 Z4 I' Z[size=1em]              else alert('动态页出问题了~~');  K  _* O& W. f, q2 q& }6 r
    [size=1em]          }! s/ S) b4 K3 O" P
    [size=1em]      }* ?( l% }0 g7 H1 E# X( r
    [size=1em]      xhr.send(null);
    6 I. [  k7 \" A2 m
    $ _. h% \; l1 D# x& o

    " Q: u8 {. A% m1 E! a
    ) O$ x2 z* a+ E0 W/ M- d/ a. d0 _( G0 F) s7 O1 P  k

    9 _: z& C3 q) o, c" c& v' T5 G& V8 O0 w) L5 d! y9 l# N
    / b. B& p; `& [( J) R
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    ' E% x9 J- w' d1 i$ v# c) e如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    # ~/ D* y+ f% W/ q' M! i
    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-31 21:53 , Processed in 0.499999 second(s), 54 queries .

    回顶部