QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1883|回复: 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 B6 ]0 u# S5 }( @  i- y

    5 v! [1 A/ N( d1 V% z4 `+ J1 C3 C  下面是ajax对象的一些常用属性,事件和方法
    $ _7 d. E6 _' d+ H" r5 w& R: z  1)标准的ajax对象的属性有readyState,status,responseText,responseXML3 E2 P; t1 o0 t3 D& D  A& m$ w4 ]
    / {( u! d+ k+ S& D
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  ; E- q4 @# ^3 V1 {0 u# W
    [backcolor=white !important][size=1em]Visual Basic code
    9 R  W, J3 ~1 a: x/ Z* D( E# l1 j
    [color=white !important][size=1em]?
    0 |8 a5 Z# o; H. Z3 [) k
    [size=1em]1

    * n3 P6 K) g8 n7 N# z1 U& O
    [size=1em]2

    * s; L$ O8 G1 n% u2 O1 Y+ h+ W
    [size=1em]3

    # U: r- A) v1 s9 l
    [size=1em]4
    7 H5 s  y1 |" S. u8 f
    [size=1em]5
    8 @3 r8 @5 {6 V$ k3 o2 H; Y
    [size=1em]6
    ! P+ A) K! H  K1 `
    [size=1em]7
    : @  U) ]- e0 t2 [' Z1 O
    [size=1em]8

    $ |* P6 U3 F+ \6 S4 S; {* v4 ^
    [size=1em]9

    % u' G$ Z; _! J1 k* G6 r* m( Q# \
    [size=1em]10
    1 U) U- F8 z4 z2 a" N: u4 D
    [size=1em]11
    * n% g1 _% `* F- u' ~
    [size=1em]12
    3 v8 |3 P' F: \& u/ _6 u+ P
    [size=1em]13

      h. ?' V: U5 a: H0 t7 v$ s
    [size=1em]14
    3 ~8 ?9 y* f% i! O
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    4 G+ n+ C0 C0 ]  I4 N6 a2 y[size=1em]     strreturn = ""
    4 `5 c3 }6 p# [[size=1em]     for i = 1 to lenb(vin)
    " N  x6 o* c/ h; ?3 {# z[size=1em]     thischarcode = ascb(midb(vin,i,1))& k9 |$ m/ C8 u% a1 P% ^) W& ^3 t
    [size=1em]     if thischarcode < &h80 then
    " d5 W9 H6 Q% ~[size=1em]        strreturn = strreturn & chr(thischarcode)
    : _$ C2 P0 ^# ?. ?9 e+ N0 }. o[size=1em]     else
    & F+ d2 a6 w# C1 L$ |: n- i[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))( x0 f' Q! i% q0 R9 T
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))5 S# o- g1 o1 e1 b' K/ ^  c
    [size=1em]        i = i + 1
    * ^4 h' Y0 g7 m# J0 |[size=1em]     end if" m7 D4 K9 O/ G! ~' A, S9 @" U& f/ K- ~
    [size=1em]     next# X  ]3 d+ }8 `& F0 B0 P& A* f) A( h
    [size=1em]     Bytes2BStr = strreturn; B# E+ k: O- D5 |
    [size=1em]End Function
    : k0 g9 @- v0 z6 @! w' K7 s7 U2 e
    ' `! E  F- @( R( u. f) S2 z; Q
    + o2 v# q7 v5 h/ ~7 N! U
    / q' {! ^, y/ n/ z6 y

    + t3 s7 I9 d4 Y' \2 S$ O9 v
      z( K9 I- N* I  3)事件onreadystatechange,状态转换函数( B! |) F  I8 d# q, F/ D1 c

    3 C# f( J% Z1 ?+ m1 a" Y  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    ! {1 X  a' ?4 X8 h7 }参考9 r+ b! o) o$ a
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    $ v; K3 T0 W( x- D( b) G$ i& u! u; m- @! M! b
      容易出现错误的问题7 Q. f+ {% R% z- Y
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。2 [- i* Y  v& O3 ?# A
    6 S  D. D5 W$ a2 h9 k1 ]
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    5 P3 d' j1 J" S; J6 L+ d  ^
    0 u1 P6 r( w2 k4 ]# l9 A" {3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    6 A/ ^0 H9 @& ^+ S! ~
    " G/ F5 p: \: z0 Y4 o" b* S6 l- F4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。0 \3 X" t/ @0 @) o% K
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    ; n/ t7 R8 i. m+ e. k9 v6 v
    # |+ J" y1 Y/ |* C9 P' o( D+ Y. A  对于手写ajax代码一些建议
    1 o+ N1 J  R  W/ D) Q1 M9 J, @! A5 |8 R1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。8 ~* [1 G( ?! ?9 i
    参考webservice json) Y  N$ V+ k2 n7 B/ f

    4 \& i+ S" w6 v7 i9 C. w2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);" A2 S2 X! I7 ?1 L0 B
    * ]0 D7 i/ d3 D( J% T
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded, ?1 Y2 D; m7 A$ o4 Q8 i" l

    % s7 ?0 l; u+ Z4 O3 ^4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    ( N! b6 p& x* J7 f5 G  v0 A) o% e# {4 x) S& Q5 `6 j
    [backcolor=white !important][size=1em]JavaScript code! e/ S1 N4 f5 h
    [color=white !important][size=1em]?

    - d" u9 j, p8 x9 Q& v
    [size=1em]1
    6 b5 R( x+ r  p+ x
    [size=1em]2

    ( j( ]3 o, ^+ F; S9 U
    [size=1em]3

    . N: |" w, _6 d9 W' q
    [size=1em]4

    " [& K0 B, I0 ]' ~
    [size=1em]5
    8 a6 ^, G, }* E4 u+ D
    [size=1em]6
      A5 D( r8 b% T  N' A5 U
    [size=1em]7

    0 |7 E/ ^- T% _" V' o9 |0 G2 ]
    [size=1em]8
    2 `' s1 S" Z. [% Y4 [
    [size=1em]9

    " w& ^/ n6 \1 a6 N
    [size=1em]10

    , O, }  P* _2 l5 c  t  ^' M" Y& U
    [size=1em]11

    % c9 N9 T/ T, a- ~5 ?& S5 Y" E  C
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    : D$ T7 b, M3 w7 t6 ~$ i[size=1em]      xhr.open('get', 'index.html', true);8 J( L0 _4 t$ d2 p% D
    [size=1em]      xhr.onreadystatechange = function () {
    7 O  e1 Y( K, b! j" ^: G[size=1em]          if (4 == xhr.readyState) {1 ]4 j. W- E( r2 Q
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    # Q. J  t/ @; m( S& [[size=1em]                  //=========正常返回后的处理代码! H5 ?. m) {3 t& u0 j  e
    [size=1em]              }
    & ]. A' w! h9 F4 ]* J0 t[size=1em]              else alert('动态页出问题了~~');5 H, o1 R0 _8 N! J: a% t3 P, E
    [size=1em]          }
    ! q: ^+ D( @7 B[size=1em]      }
    7 l  N. A9 E3 B[size=1em]      xhr.send(null);5 E* c$ h1 c/ X' N% E; Y, `
    % L- B9 T8 I( d8 S$ x" o8 _
    1 x( B  @8 D' M" |4 X* v

    % U6 O; q8 ?. g. i7 N8 H7 N
    * I% w% P# T( w) }: S4 v2 H+ Q0 P; ~5 M/ L7 K+ W4 k' G1 O6 k, }

    ) @8 Z! k7 n% d( \
    3 j* Q7 q1 e3 K5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。; G: w! u' V2 R6 O$ [3 _0 k
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。3 r' p# Q; P; n1 E# X
    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-7-13 09:07 , Processed in 0.412955 second(s), 54 queries .

    回顶部