QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1927|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。5 ?6 P! b8 p/ p, y7 G9 ^- @

    # o0 S7 n: {3 l% z' D, n: G0 M  下面是ajax对象的一些常用属性,事件和方法5 M! B" f, H* j6 o
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML9 P0 V, v4 D! r% e
    , A% ^! Q+ B% G' x) ]) \
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  % K/ K; W+ s$ Q5 v. U+ d6 h
    [backcolor=white !important][size=1em]Visual Basic code! z, D2 s- J, ~" N
    [color=white !important][size=1em]?
      }8 c! i0 Q1 Q+ \2 [2 F
    [size=1em]1
    ' I. G3 ]; @8 L# u' z, y. F5 C
    [size=1em]2
    ' o' G1 K- G1 R8 U0 q# B8 f
    [size=1em]3

    9 F4 H; C5 _" B6 i* ?7 |* a  h
    [size=1em]4

    % y, [3 S( S4 c! m
    [size=1em]5
    : X  M9 C7 U! J! y3 u" j/ e
    [size=1em]6

    ; F$ H5 p% E4 [+ j
    [size=1em]7
    . A: _/ r" m+ O# ^% X
    [size=1em]8

    4 j+ D" f; u/ V3 o& ?
    [size=1em]9

    $ N: h* E6 I1 d* T- i4 ^
    [size=1em]10

    4 @7 \- k$ q- R
    [size=1em]11

    0 l1 j+ G+ N6 ?5 m" l: N
    [size=1em]12

    ( J; f, D  q2 ]: g
    [size=1em]13

    ' X- ^4 I+ N1 D5 g4 h9 b
    [size=1em]14

    3 \2 `( k; m2 o
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串' Y9 P( z8 ^3 W& S. O! {
    [size=1em]     strreturn = ""( r1 }4 X/ K; `) x3 U* k
    [size=1em]     for i = 1 to lenb(vin)
    " e& N4 u- ~6 |& v[size=1em]     thischarcode = ascb(midb(vin,i,1))
    4 C, r) }. A9 W+ S) W- y[size=1em]     if thischarcode < &h80 then
    * v, E5 T6 D9 K; h[size=1em]        strreturn = strreturn & chr(thischarcode). ~3 m$ ^4 w3 g" A, c$ f
    [size=1em]     else
    & @* Z+ V2 D8 U0 o% v[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))
    % u3 ?) E7 d. z& @  @- \1 M[size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    7 N3 N) H6 V- ?2 B! M[size=1em]        i = i + 1
    ( c/ x8 i8 X, G) m$ d) Y[size=1em]     end if
    7 h3 W6 B& q5 ?4 i4 J0 u[size=1em]     next3 S4 v9 r% ], N) W0 V' S1 h
    [size=1em]     Bytes2BStr = strreturn
    : F6 M* l* R( H/ L, u[size=1em]End Function( u" l$ v, ^! H6 B4 h

    4 m6 y$ a" ]. ~' Q
    & b9 M: [) X( V/ L- ~

    ( u1 }+ W# h  O8 C8 S  p. l( J7 @7 \6 V4 c6 @" J

    5 v5 n; i4 H, F4 c0 [9 Q' K# P$ o. T7 T, ?0 k% I7 W
      3)事件onreadystatechange,状态转换函数6 k# B! a2 V% j/ l! Q6 C6 M! a

    5 r3 |. F/ i7 D) Y! M" ~  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。" a1 t: z! c( B7 u$ K4 I$ j8 I
    参考1 _  m5 S! {# G# a: x
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    * d4 U% n& j$ R: ^
    9 D3 @: B- V- D9 n& A# D1 v  容易出现错误的问题
    + n/ S8 D1 n! z- t1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    $ [$ B9 {3 b  Q
    ; d3 H, s0 Y' J, t2 C2 G( `, [0 T2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    " T" W5 a( k/ ?  d7 J0 t
    , F; i  z/ @3 P  P4 e  v# w3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    , f  y) Z4 Z/ O# T' _  c# z. G* D# x8 U* g
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    ) a+ n% c' E  o5 w, s: T* \, [" ~  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    3 D, v9 o$ r5 @+ Z7 v$ T8 y9 z& L0 T/ ^
      对于手写ajax代码一些建议
    ; u( [8 J3 R% e7 g6 q% g% l1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。, K; i# X3 u6 N' K
    参考webservice json
    , m) N0 ?+ c6 |, E: v/ v# |  d. [4 T
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);& ^2 r  _$ x4 \5 g; x4 `0 |- Y; N' C2 b. y

    * n: V, U  z  w+ x9 ?3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded$ r5 I  R" O6 }  q. X( D. Q6 A. C6 l

    ; p$ x6 N  E. z: J+ \: G4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    : K3 y$ v. l4 ~& ]' c0 A
    1 R6 u5 |9 @1 ~+ g2 y9 q[backcolor=white !important][size=1em]JavaScript code
    ) r1 E2 ?" z  x, f
    [color=white !important][size=1em]?
    ; K, u0 ~. x. R( q% L- M6 e# e9 W
    [size=1em]1

    0 @" c$ v8 u4 m3 d
    [size=1em]2

    ) g4 O5 L; R5 b# D9 h+ R: n
    [size=1em]3
    3 U. a% k$ e5 U; n, O
    [size=1em]4
    5 s" l$ T- ~- s
    [size=1em]5
    ) G6 B' ]9 t: G# \" a
    [size=1em]6

    $ z' m& P4 R( z8 Z, h
    [size=1em]7
    & b4 h9 W6 o% _. ]$ T% U  Q
    [size=1em]8
    6 F5 S3 z8 K9 Z3 D6 F+ E
    [size=1em]9

    % Q  x/ {4 s* u/ b6 Y4 Q
    [size=1em]10
    0 b# i( S; m8 C9 s% _( c. _
    [size=1em]11

    $ q2 U7 y7 Y, R) t, a
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    0 Z$ _# t- F% A[size=1em]      xhr.open('get', 'index.html', true);
    " D3 R5 [3 f- x9 V; O& Y1 F1 j# j[size=1em]      xhr.onreadystatechange = function () {/ s) g% L+ G: f9 v4 _) c
    [size=1em]          if (4 == xhr.readyState) {
    # |; i: T* e6 k& F; D5 E0 c1 s[size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    2 T  [" Y5 T$ J8 v9 v! o5 ?[size=1em]                  //=========正常返回后的处理代码
    % D4 s( N' J- e4 b& c& r" _[size=1em]              }  x% T- n2 J& i* T
    [size=1em]              else alert('动态页出问题了~~');
    # L. f# w8 A1 q. Z- w: ]! F[size=1em]          }
    . p- I! v4 H8 S3 W; P8 s[size=1em]      }
    9 h: V) }' f$ @/ R4 i% }; f[size=1em]      xhr.send(null);
    5 j! i4 ?3 Q$ d  M8 I* W
    3 ^' |) [5 m2 u. Y7 ?7 x
    ' K% f1 ]3 x- N" ^& j6 _; k3 I
    , U* o$ J  D5 l
    + Z( d+ h* x! C' c2 a$ D& d- i

    7 s6 `  `# ?1 [" H0 [( p/ g! D* [2 G4 V( e+ x
    ( D; T1 d9 O/ b! C
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。! r0 X9 L* x6 H
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。& x  H7 O* 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-8-31 17:05 , Processed in 0.269634 second(s), 54 queries .

    回顶部