QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1860|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。4 W. j, _) q' n- o- z

    . M& \! m) e7 ]$ O0 A/ @  下面是ajax对象的一些常用属性,事件和方法
    4 g- W( C4 J- m8 p6 t8 y  1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    8 Z  {) W: \4 H/ O: Z/ ]
    $ d2 A0 u+ X  N% T0 z6 c6 a9 ]  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    " S3 ]9 W6 H( V[backcolor=white !important][size=1em]Visual Basic code' N( i7 C" s  {, R' k& o1 q( z
    [color=white !important][size=1em]?
    9 e6 }* E% d4 e$ }, @$ L
    [size=1em]1

    : O" V1 E4 N/ x7 W0 r* o! @* k
    [size=1em]2

    : }& o# {/ u: W* g. w* m) m, ^
    [size=1em]3
    : ^: B- U3 o1 h: z0 T/ U
    [size=1em]4
    " i) N) z  z- s; m# I4 y: O
    [size=1em]5

    ' @* ~" ^. A0 `  p4 b+ \. ?* Y* t
    [size=1em]6

    , b+ G3 F" K9 {
    [size=1em]7
    3 _# f& ?0 Q1 V( l- O1 |
    [size=1em]8

      I8 [1 G( s6 o+ \( h' d
    [size=1em]9

    , g3 T4 \5 ^* l! E* X9 |
    [size=1em]10

    % R6 _* }8 i" Q2 Q) Q( V3 W
    [size=1em]11

    1 t( X( v2 s% E+ q+ z0 P
    [size=1em]12

    + M& I; G- J* m! R/ B9 A0 J
    [size=1em]13
    9 f' S# `' v( Q- n
    [size=1em]14

    # y9 N+ l/ a! t1 S. m. J( e
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    # A' Q; H6 }5 Y1 Y9 F. Z[size=1em]     strreturn = ""
    + ^5 l6 X) e+ _6 K7 L$ d) ][size=1em]     for i = 1 to lenb(vin)
    1 S9 i. A4 T. {- d* X; i& f3 Y4 V[size=1em]     thischarcode = ascb(midb(vin,i,1))  L0 g% p# B1 b
    [size=1em]     if thischarcode < &h80 then
    , r" A2 W" F. |[size=1em]        strreturn = strreturn & chr(thischarcode)
    & G/ X% W/ c& Z; ~/ [0 N4 k) U2 ~' L[size=1em]     else2 ^1 r" {6 t, s- Z6 W, ]
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1)), {" i7 R) p, P% ]: |+ P  P
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    ; P" [6 C& J- Z[size=1em]        i = i + 1$ R- L2 v+ ~# @0 w$ \& ?7 h  C- I
    [size=1em]     end if
    ! l" |; {5 H7 r4 v3 @[size=1em]     next5 k2 p! v4 N! q/ q- F
    [size=1em]     Bytes2BStr = strreturn7 L' z4 C6 r: f: i5 m& J" e6 I( E$ l
    [size=1em]End Function8 e8 l* n  Y: s; z

    # Z- L+ H: Q( \& O1 k, ~( z

    4 f, \4 n9 ~/ J. |8 _  ^
    ( `4 A! y5 y9 {& Z' B, o6 m! V/ j0 V( C
    " t# }- O+ f! `( `4 M! r( k) k

    4 j  {7 S% }' @4 r' N; E# x! |  3)事件onreadystatechange,状态转换函数
    8 {8 b( b$ v3 R$ o* I3 F1 n3 |9 _1 ]* _8 B" B, o4 Z1 \2 h. `. z* u
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。; K- t7 j# g# B5 a: X9 J- ~. ~
    参考
    " u$ K  c, d3 J5 Q0 ^ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容% \6 S- ]; ?! ]1 t2 a) \

      \( {3 J# @# O* G7 d  容易出现错误的问题. Y7 o% g3 j; s0 U
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    # S1 B) H; Y5 a' e8 @5 x; U8 M- j
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    ; O0 P5 `. [. w( u# B( D3 N/ `* E
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写, k" p+ Y- D' N! g! _$ F

    : p6 E6 x. m5 h4 k4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    6 c+ D. v( o3 ~# o7 V5 v  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。) `5 I8 \1 O5 w9 y( w! S) A
    0 \) W6 B) @1 u) z, H
      对于手写ajax代码一些建议4 Y6 z+ U# O0 n. P7 P
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    / {/ m( `% f6 i1 p( p' {6 H& U参考webservice json1 \4 ~/ h$ r7 s
    ! N1 ~- `" O/ h5 l' X( Y
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);$ o: ?' a0 j0 {* P# o
    6 I4 q$ v5 }6 }+ j* p  W7 ~2 q
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded% D( @% D$ I1 P& u  u( j* N
    * p+ {& D& f" O
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    , x' f. y8 k* f/ d. q( a# q3 j$ C: b+ x6 [3 I6 ]! ^: y5 W$ E) N/ I
    [backcolor=white !important][size=1em]JavaScript code, R0 Y( ^+ i2 G( b; ^
    [color=white !important][size=1em]?
    2 s& c( Q/ T. e3 p: x
    [size=1em]1

    . l; u0 X" Y' v
    [size=1em]2
    1 f( Z' d- K7 G9 B: ]% H0 t* C5 P% l
    [size=1em]3

    ' o3 U# u4 B$ M. c9 p
    [size=1em]4
    ; ^. p! X: o) i$ Q  N7 @
    [size=1em]5

    ; J6 ~1 H* @$ a* v, g9 c
    [size=1em]6

    ; @0 l$ l2 f" l3 J0 g
    [size=1em]7

    ) @  W; S$ r; J" `: n: F
    [size=1em]8

    5 R' b4 O. k; v3 g& w* X! q
    [size=1em]9

    ( V# ?; D; A& I
    [size=1em]10

    : w( T1 d$ q) i8 ^1 ~
    [size=1em]11
      `. D; K* J$ {# s$ {9 ?: n
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    2 c* K* E+ J1 y[size=1em]      xhr.open('get', 'index.html', true);
    6 k) b/ h' M9 L[size=1em]      xhr.onreadystatechange = function () {/ P. l4 h, ^4 }) R6 ^# v- R
    [size=1em]          if (4 == xhr.readyState) {' h+ r3 W# @+ ^) R/ y' U+ c$ X
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    # @" A- u* x1 n* o+ \' `[size=1em]                  //=========正常返回后的处理代码
    * k- N2 x1 J: L5 t/ R% r[size=1em]              }
    8 }" \( M7 B1 j- a8 I8 N[size=1em]              else alert('动态页出问题了~~');
    * U; E, T0 ~* H+ o. t[size=1em]          }
    ) y! v8 o/ N1 a; Q2 r1 G[size=1em]      }6 x/ t; g/ o. m$ y$ \* A
    [size=1em]      xhr.send(null);) @5 Y; V+ Z  q! F6 I% r  m  l" f, z
    % }" [+ B9 {1 i$ _

    ( F9 d: R& m8 T) q" y# G/ r7 ~4 U& X  G2 x& c; ]+ Y
    ) S+ s. ]& f" p5 h

    7 h/ \8 S' G; G, j. s: k) a9 m1 \6 B9 b# z1 |2 O
    ) U  D9 g+ r2 J0 ]
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。0 L9 O# h# z3 n) W: n" N
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。8 H/ m2 a7 q% g$ H1 z, }$ l; F  p" k/ n
    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-5-27 10:02 , Processed in 0.447012 second(s), 53 queries .

    回顶部