QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1929|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
    8 u4 y" `' J- e) c/ X1 [# s
    6 K* Q8 r/ ]- K6 U9 Z  下面是ajax对象的一些常用属性,事件和方法
    . H# s2 t  r% N7 i3 i) E* O) N  1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    * W% @# b5 C2 F- e& X* f+ |7 f9 S6 |4 t- W0 w5 m/ s) ~6 @& z7 Q3 |) H
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    - z! ?' j# ~( R. I4 t4 D7 {% L+ c[backcolor=white !important][size=1em]Visual Basic code9 b! o- n5 V! A
    [color=white !important][size=1em]?

      T2 _# W+ A9 U8 J1 I
    [size=1em]1

    % }$ V" v* m  H9 U6 C: P
    [size=1em]2

    / u( z9 u% e4 w+ Y/ n0 C4 G
    [size=1em]3
    - {5 S0 _3 ?8 P, g+ ^9 ]$ F3 T( `
    [size=1em]4

    2 K5 |- c2 g: S; I4 ^
    [size=1em]5

    " d* u8 q- |0 c; @$ B
    [size=1em]6
    * U! c# A  a% P; u8 ^
    [size=1em]7

    9 r' i2 d( n$ Q- k" ~
    [size=1em]8
    # T1 D/ q! o7 a
    [size=1em]9
    * z; y# s  |' [( L  w( T
    [size=1em]10
    " {  L' |6 F4 B/ e% M4 {8 H
    [size=1em]11

    6 a0 W6 r$ _( v! H" |( o
    [size=1em]12

    / J9 p) l3 w  q! L1 _7 ~
    [size=1em]13

    # O2 ?9 C) g3 N( ~. e
    [size=1em]14
    ! d% ]( _! _8 m' Q; f! f* J
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    . p6 S$ Y( h" c2 \" Q1 T[size=1em]     strreturn = ""
    ' u' Y  \* V, P7 A  f[size=1em]     for i = 1 to lenb(vin)
    7 k) o. O; g7 c[size=1em]     thischarcode = ascb(midb(vin,i,1))  I% D- Y$ H9 O% I
    [size=1em]     if thischarcode < &h80 then% C) W  Z3 n: r5 O- ^" W6 `! d
    [size=1em]        strreturn = strreturn & chr(thischarcode)
    $ Q* N2 E; K; i& q$ M[size=1em]     else1 X/ N% @) @1 A  g( R0 g" v
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))9 u# z  Q4 _2 Y, A
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))$ U: k4 f' h$ ^; q) M
    [size=1em]        i = i + 1
    ' F/ H- [! t) U, j- }[size=1em]     end if- R* Y; G1 U" p4 D9 n4 `. @# f
    [size=1em]     next! m7 h: h9 |) r! k, c6 b
    [size=1em]     Bytes2BStr = strreturn6 ^9 ~6 l! e' Y2 k
    [size=1em]End Function1 B0 C, I  f& \/ T! U! n

    4 ~/ a, A9 a- k* M1 y8 E% P

    8 a3 }1 ~: W+ n2 n, o3 ?. b( I4 m7 I& Z6 x: E
    6 V; ?" _& w2 _2 \3 H2 F0 o9 v
    5 K9 ?4 b/ ~" j: m% A0 n

    0 {; r9 V& Z9 n" |7 |- ?8 {5 ]6 T  3)事件onreadystatechange,状态转换函数
    # ^, s, _7 x6 G: D2 O) X4 G  @2 d. d& h. E1 `6 Q* M
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    2 ?2 w0 u) Y. A+ Q; p* y参考! C( p& d. T8 u% X
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    ; `0 `( t% c3 Z5 e' y# E' Q, e. x
      容易出现错误的问题+ z  L) i9 W/ B& q/ r  }
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    ( ?* M# C- E9 Z' [. W! z, i/ u4 W' a/ Z, Y5 X/ j
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    * G6 j' J4 B& T6 H) A$ o5 U) x9 h0 F2 S
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    ; Q! }, w6 L6 u3 q. z, e. L# y& C* h$ @1 q, O1 q. N
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。- T) q3 U0 K! T! V
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    1 T( v7 u9 G7 A0 y- f. p) R7 Q; R; o' p7 A6 m: Z
      对于手写ajax代码一些建议
    " m1 p, I$ s$ ^1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    # W4 \5 q6 ], e# }, G参考webservice json. R  d: Q+ N: R7 T0 G1 W
    ) I% k+ r5 l$ B) i2 }# Z8 `
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    ) r1 k' e& e% l( _( ^0 j/ h: c+ ^, H! v+ B" o) u
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded. Y* l* r0 N" P8 ]- h2 e
    , j1 Z3 V) m% e7 i1 D6 S- K8 [
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用% h. l% v8 {( C/ m3 X% j

    * P" N0 R; s4 A* B7 @+ z& q[backcolor=white !important][size=1em]JavaScript code/ P( Q( J, \' P  }7 e  j: L; F6 W
    [color=white !important][size=1em]?
    1 F. |2 @) j5 L* x3 ^6 z
    [size=1em]1

    $ e% V2 j, Z- [9 T. h
    [size=1em]2
      B9 v+ D9 E; u: Z- L& h. w
    [size=1em]3

    & b% @4 H, f3 O0 [( j$ u
    [size=1em]4
    % s/ m2 n! R" n5 `' r
    [size=1em]5
    7 }5 c' ~4 X" O* k, h' m
    [size=1em]6
    6 y! u* h; d. `( t& \
    [size=1em]7
    1 y' c* x5 v+ g8 e) S
    [size=1em]8
    : ~# T/ A# h; c$ J: R, c4 S3 D2 ^
    [size=1em]9
    ) M; r6 Z+ L) W9 K
    [size=1em]10
    . X3 V- N( |' |; P
    [size=1em]11
    6 I5 F% _/ {+ [' H
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");1 f8 m& U6 c& }/ g
    [size=1em]      xhr.open('get', 'index.html', true);3 d' f1 P, O3 {/ o7 \, C7 g
    [size=1em]      xhr.onreadystatechange = function () {
    - h) w) \' z" ^5 c% U[size=1em]          if (4 == xhr.readyState) {* {( E) @0 S' n+ t) Q3 {
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {8 ^; c# f- ^/ s) l% k# X5 W
    [size=1em]                  //=========正常返回后的处理代码
    6 j) W$ H& x6 k/ Q  f[size=1em]              }
    ! L( T1 O; v1 e5 V4 L[size=1em]              else alert('动态页出问题了~~');) N! A$ N( j* z3 \5 x
    [size=1em]          }
      c( C2 b+ X5 q  r3 ^4 Z4 i/ V[size=1em]      }
    . u5 A$ y- |4 q- A8 W[size=1em]      xhr.send(null);
    - Q+ o$ R1 y& K3 B
    * R, ?: U; O( r
    ' p5 b3 t5 k/ }; }' y1 V
    ' A0 t' q( v. y$ |

    ) \  M& T+ B2 Y. z7 `
    ) S: k, g, z9 A3 y# q, j
    $ N$ P8 `/ B; V+ p( P2 T# L" l  I9 Y: v6 T: M" d' `
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    + {2 p$ D. d" M7 T4 W. z' B如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。7 i6 A0 M" J; g$ ]- W' ~  W
    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-9-1 01:24 , Processed in 0.411411 second(s), 56 queries .

    回顶部