QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1829|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
      ?/ r0 r0 m3 a$ H( s
    2 e, p& r5 |( b2 ^& c/ I  下面是ajax对象的一些常用属性,事件和方法2 Y# h+ e* ~& w8 \6 A
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    2 t5 ^9 `, B* }7 T( x/ u4 G: n6 @8 Q" d) r) y. `
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  # E& Y& p$ }" [0 K- b# w! s
    [backcolor=white !important][size=1em]Visual Basic code1 y2 m, L7 Z5 z$ B4 a/ H
    [color=white !important][size=1em]?
    $ ?3 T* e* r' f# H& d$ G& C
    [size=1em]1
    1 X# L+ J6 s+ l! A' `! h4 q
    [size=1em]2

    $ f/ ^( e7 y( D- i
    [size=1em]3

    ( Y/ {& Z$ }9 d1 E
    [size=1em]4
    $ |' Z5 Y/ w9 H5 e7 u# @6 W0 |
    [size=1em]5

    ; f% m$ q4 O: D7 v' {  L
    [size=1em]6
    / ^' V: |! a, s. W. ]
    [size=1em]7
    4 }' E3 e5 V& J6 i3 ?% \
    [size=1em]8
    ) @8 q4 d  n# r% ^: f5 }2 p  T
    [size=1em]9
    ( Q) x! w; T; x: P3 ~4 ^  J: r# b
    [size=1em]10
    , }/ S* a! o( m+ r. t
    [size=1em]11

    ; ^* y- m( Z! S3 Y" y/ X+ b
    [size=1em]12
    . y6 ?7 _6 {( \/ T2 Q( t9 x8 e6 q
    [size=1em]13
    $ O/ O! k( x0 H# a7 |6 C& g
    [size=1em]14
    ) J. s1 P0 ~; o1 t8 _
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    ' p) @7 [1 H# C) L2 ~! o[size=1em]     strreturn = ""8 N4 v! g! |' ]3 I+ p+ a
    [size=1em]     for i = 1 to lenb(vin)1 r: {3 y1 C4 J3 m: Q/ h9 ~5 H$ D
    [size=1em]     thischarcode = ascb(midb(vin,i,1))/ J1 S5 s9 T, w2 T
    [size=1em]     if thischarcode < &h80 then
    + R8 m" O1 U, @4 Z# m[size=1em]        strreturn = strreturn & chr(thischarcode)
    + p% }. a; h4 k" J2 M8 g[size=1em]     else' ~) E4 E( A8 |$ e
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))* t4 s8 R! Q# ~4 j$ X' `
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))5 V# B) c4 K3 M8 a' V6 v
    [size=1em]        i = i + 1
    ( h' b0 P1 t3 y, u5 c8 v7 m  a6 F/ W[size=1em]     end if4 ]; J. ^" S9 @7 ~1 I/ _
    [size=1em]     next0 L: I( @* v$ B# w/ v" S8 v
    [size=1em]     Bytes2BStr = strreturn) C$ J  b9 L' n0 h" n
    [size=1em]End Function4 l  p- c0 B6 F

    6 D+ M5 N, ^  V9 n1 I
    ! |$ n' V+ ^- L- C* x2 a# Z
    5 o6 O: m1 J% w  Y9 D
    , w: D0 [5 b" j2 k) I
    # V. q) s4 i, y* W: {
    4 U0 m: j' F* U! u' D
      3)事件onreadystatechange,状态转换函数
    & w$ r+ L, l% j( c: ^; Y! Q* J* J  E
    & P7 u9 G( W# B6 G0 z0 g' U2 V  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。9 ^# R9 @4 ?! X0 o
    参考# Z: g# J/ A8 X, C
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容7 u8 G  J& I6 [3 F) f
    * s% B! I5 O8 e7 w8 Q( S
      容易出现错误的问题* o( \$ R( v( ^9 `. D
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。5 ?( H  K  m7 A
    8 X0 Z/ ?8 H1 P) v3 T8 {' J4 I
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写' z& T+ f* S* N: M5 Q, g4 }  ^9 I4 Q

    3 n( C0 M6 R2 c9 I$ o7 p5 u3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    * Z3 I6 t& l6 D! b; f: w# C8 s$ I2 N# P/ T' y. g
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。+ I2 o- A* |" y9 y2 ^
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。6 p9 Z2 ^4 _7 H7 d% o
    5 A, S  i; ~1 f1 p2 p3 E
      对于手写ajax代码一些建议
    , l, a& D4 @- a1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。% F, h, g, t7 `1 }9 \( g. S/ r
    参考webservice json
    ! I* d4 R& }5 c- t/ T& C7 M* @% R5 }$ ?! o, z+ @
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    + m# F, I% G3 U2 u- U6 y5 j: s- F% M7 `/ V
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    + y  n7 Q6 m" h. s0 M% D5 u# y( K  s* J: J4 [' w( v! J& n1 s4 I
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    ( P7 E% n4 p8 O2 s$ S# b
    5 _; l9 m6 t- N8 L0 c[backcolor=white !important][size=1em]JavaScript code
    % ]* u9 w  v  C; \8 }5 G: K
    [color=white !important][size=1em]?

    , h) _; c) V- W4 |
    [size=1em]1

    ' d* b  v/ o; w. R: d2 ~6 E
    [size=1em]2

    + Y8 _2 Z5 ^7 s2 y; N
    [size=1em]3
    . c0 Q' z3 K& \
    [size=1em]4
    4 {8 g* ]/ s6 B, f
    [size=1em]5
    7 `  C- f5 y2 A) @/ {0 V# I* H8 R
    [size=1em]6

    ! s/ A3 L) j+ t8 b- I
    [size=1em]7
    5 [* M$ H0 Z) G: G. E
    [size=1em]8
    ; [* S% b/ d$ u) P
    [size=1em]9

    . v9 p% x; q( C! t+ ^
    [size=1em]10

    ! W7 L  O! ^( [$ u
    [size=1em]11

    5 N7 \; O3 [3 S3 L
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    1 F; |; u6 ~- C2 ]! G[size=1em]      xhr.open('get', 'index.html', true);
    " o+ u# o5 P4 F2 ?( X( N* `3 |[size=1em]      xhr.onreadystatechange = function () {
      h: C$ {. h: C0 k[size=1em]          if (4 == xhr.readyState) {
    4 \4 w- j9 ?; ~( O1 S[size=1em]              if (200 == xhr.status || 0 == xhr.status) {- I& `7 ?8 W$ p+ ^9 T; P
    [size=1em]                  //=========正常返回后的处理代码
    ; B0 W0 f* w$ Q/ T! f[size=1em]              }
    1 g* j& S& Z8 f+ d8 j7 b, k[size=1em]              else alert('动态页出问题了~~');
    & [: u1 i' q6 l: h[size=1em]          }
    , P6 h) _9 ?5 p8 g+ r; l% W[size=1em]      }
    0 |( O7 ^1 p$ u3 @$ B+ i7 f[size=1em]      xhr.send(null);" ]1 @: a6 f3 e# ?6 `* P
    ( f4 T" z2 n) ^' e
    3 p: M: v5 _3 b, U5 ?( C

    - Q6 s3 m& B! a4 j( X) \" h2 ?
    ( E( [! ?, ?2 ?# F9 d0 Q( k$ \) e+ {. b

    4 ~1 ?% c# E1 ?* {7 X+ {4 A( I7 m$ p" J
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。6 z! b( g9 ?. R2 O
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。$ o5 Z& ~2 ^3 E! N# T& W& _' [; D4 \" 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-4-10 10:09 , Processed in 0.418727 second(s), 53 queries .

    回顶部