QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1834|回复: 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 _  b% u! P2 @0 F$ X. B1 N( I% S8 b
    # P& @2 N) v& J* B8 z
      下面是ajax对象的一些常用属性,事件和方法
    , x% {. S9 c* h2 i4 e  1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    ) O! o* ]8 y4 s! Y4 H% l; f$ V) O; Q
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  ; H& P" s% j$ V; o* b
    [backcolor=white !important][size=1em]Visual Basic code
    9 S) ?: J% i# C+ Z- f! }' U
    [color=white !important][size=1em]?
    4 V) ]! Z2 }2 g- \0 p4 l% P
    [size=1em]1
    - G6 [  t! v  N6 Z
    [size=1em]2
      C" p1 h8 y& f% x
    [size=1em]3

    4 N0 H7 i- T0 `; s" V& u# v
    [size=1em]4

    , o- m. n7 H  c5 v5 q" U8 y0 s, \7 M* c
    [size=1em]5

    5 v. ~: C2 L! L, ~* K/ q! p
    [size=1em]6

    & |) b& S2 {, n6 @9 J$ D
    [size=1em]7
    ; M  F/ |7 @* W8 ]& L; z( }
    [size=1em]8

      J! T+ I" d% X% o% o0 x
    [size=1em]9
    8 d, s1 u5 G8 O( x3 P; D9 H
    [size=1em]10

    * J: i  Y8 Q0 Q$ u6 L  ~& c
    [size=1em]11

    * E7 `; G5 h# Q, \5 e1 K" ]
    [size=1em]12

      M$ ^  d; D3 A; M- M: Z9 n
    [size=1em]13

    4 X: l) \/ ^% X" I
    [size=1em]14

    # S/ n3 u# O7 `! X) R2 F
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串: I% z* `% N. j7 N/ W" o* {2 d
    [size=1em]     strreturn = ""0 ]  H. f  v+ s8 r( V' u$ _
    [size=1em]     for i = 1 to lenb(vin): [9 \) v1 y( z9 `9 {
    [size=1em]     thischarcode = ascb(midb(vin,i,1))
    . L# Z3 I' Y! W, g% s1 k1 b, x" X: c[size=1em]     if thischarcode < &h80 then
    4 L( e3 M* S, t3 W[size=1em]        strreturn = strreturn & chr(thischarcode)
    3 x7 l! _. k1 I  M[size=1em]     else8 J  n5 r2 P: D1 {4 R5 e3 p
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))
    : E+ r' T" w5 P  Q1 ~1 Y; j, ~[size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    4 x5 w8 h* y# ]: m# |6 k[size=1em]        i = i + 1
    8 z: Y- h! e4 `0 y% ~  |  m: o[size=1em]     end if
      x. `8 @7 C/ ~1 w4 b. Y4 T[size=1em]     next
    " R3 P+ [! t! Q! m' F8 h; K[size=1em]     Bytes2BStr = strreturn$ q5 X7 H6 @8 h$ Z& A! ^* ]  V5 i
    [size=1em]End Function
    - H# p! j& O2 U  ]& c! Y4 A
    7 q& K8 k9 G, D7 J$ G! H8 {: G6 e

    ! y3 \2 `  }' Z5 k. \) K
    1 I; y( K1 v* n
    * Q4 s1 m# L2 ^3 p% L; d( F- A- W$ _( i; R- h6 \4 ?1 z
    - j% F& V, \2 P5 c! ^8 U7 G! m
      3)事件onreadystatechange,状态转换函数1 S4 Y- W! o6 Z" I$ o
    # `# X" A$ A5 `6 q' U) L+ r
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。; U/ S! k1 s. p! D
    参考
      ?$ ]( A1 l  B! h" Wajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    ) {7 O, B4 m/ N4 i, H
    # q0 D9 J4 ]: k6 s. d  容易出现错误的问题9 v9 ]1 V: }, X  w# A+ k
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。0 Q9 W) p0 ?! U( D0 r7 y
    % Y! B4 ~. w1 h- J
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    , @) D2 C: I) V3 j
      ]  J) V: k- R3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    3 \. d1 W$ W, u5 x8 ~: p$ G: l+ i+ b9 u' b
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。& Q. {( U% A. [% b$ C6 G' @, d2 X1 T
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    6 \% I3 @0 i2 b& o  [
    2 \. p9 m+ l( l  对于手写ajax代码一些建议- q/ m$ u6 P8 a8 u; B1 C" Q8 |9 k  X
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    ( I9 R: A+ g5 p& w参考webservice json9 R/ v$ D+ b$ s7 H* }* S

    9 `, Q/ U& N1 F1 w$ ~2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    % ~3 F- ?4 O3 S( H- E+ j& R: d5 h8 L* d$ T
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded4 `$ p$ C0 b! n  j
    0 G8 N( h" T2 Z
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    % }: n$ H2 U1 t# ]
    + U0 B, X& [; h# A" t9 ?[backcolor=white !important][size=1em]JavaScript code" o  _6 s- X' T: U
    [color=white !important][size=1em]?

    & H; W# p( [0 A9 ^) f
    [size=1em]1
    2 o: V  N3 n2 Q* }1 d* L/ ^2 @( N$ W
    [size=1em]2
    : q9 a2 c0 b' z* j! D
    [size=1em]3

    " F6 A% h' |6 }( j! d9 g. r
    [size=1em]4
    - M) s- a9 i: I+ s7 l- |1 ]8 I
    [size=1em]5

    ' ~* e- V  j' E6 c# v% l' [
    [size=1em]6
    & A4 G/ i2 j" e# Q0 _4 W7 J! I+ i
    [size=1em]7
    : J6 x& P. e( ?  Y' Z) b1 l
    [size=1em]8

    / Z- U+ F# r* O
    [size=1em]9
      t. v) ?/ U' U( g0 \
    [size=1em]10
    2 ?8 V* H* }% y3 N7 t
    [size=1em]11
    ) J2 f  c5 M, ?
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    * j4 n: K! g: v$ p! N9 g6 R[size=1em]      xhr.open('get', 'index.html', true);2 D4 ^6 g: x% G  t
    [size=1em]      xhr.onreadystatechange = function () {
    $ D5 H$ _/ a9 ^/ F& o! G7 b[size=1em]          if (4 == xhr.readyState) {
    : v, w: B8 I: |/ r: V" f0 I[size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    5 j5 _9 I" V  w9 y/ z0 c( N[size=1em]                  //=========正常返回后的处理代码
    % b0 S: ]( t$ g% F8 e7 U& d[size=1em]              }
    $ A8 ?+ `8 {6 z2 k" |0 I[size=1em]              else alert('动态页出问题了~~');( D, J$ X6 o5 D8 u' J# l- Y
    [size=1em]          }& n! [8 t0 g/ V* [6 c. B7 _
    [size=1em]      }
    8 G: w- ]3 r$ Q6 M! @& l[size=1em]      xhr.send(null);
    0 u9 J. f7 _% m3 r3 r+ ]# b, D$ i" W; k! e

    8 L' V4 ?5 t# z6 G( U& n9 W( n
    % L# b( T& i' _3 X+ J3 s1 C
    " F4 J9 A9 \1 g6 n( s* i9 `
    0 t/ C8 o  w( y0 N' A2 K
    & z$ `1 t1 Y3 ^9 A3 H& O4 u% \2 b" ?$ [' _
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    ) b. f! D! b4 o) R! M如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。; \3 u' C) d8 W  `4 V5 L2 h
    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-15 09:35 , Processed in 0.449620 second(s), 54 queries .

    回顶部