QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1857|回复: 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 I2 C: P# r9 b/ b6 @/ n
    2 r3 i* p( E4 Z+ }& S" @: z. T: T4 s4 \
      下面是ajax对象的一些常用属性,事件和方法$ i) a' f1 _& x6 S0 R, t! i7 k
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    4 |0 v; Y9 u. M7 B! j9 O1 u" [$ }9 C! Y) s
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    . d7 }+ R: s1 C; b+ r[backcolor=white !important][size=1em]Visual Basic code9 [! ^. {6 x: A! _2 B8 Q3 |
    [color=white !important][size=1em]?

    1 F8 `' a: d+ o) t
    [size=1em]1

    . s+ g9 {7 O% h
    [size=1em]2

    & Z' {( W, |5 n& }$ D; P% n! F- ?* W
    [size=1em]3

    * d( H% X% k8 {
    [size=1em]4

    % z1 q2 l% t% L8 ^
    [size=1em]5
    4 n& n0 U9 e$ ~" c! J
    [size=1em]6
    . g  U7 A" R/ e/ K! y
    [size=1em]7

    ! M2 S9 A) I8 d8 E  T
    [size=1em]8

    ( i2 H; I" g0 J: n
    [size=1em]9
    2 a6 T, h4 M" X
    [size=1em]10
    % A: K' }1 p9 L- \
    [size=1em]11

    - \- _+ O" Z0 H$ ^# I7 B
    [size=1em]12
    2 K7 s* ?( ?% _1 ~0 t
    [size=1em]13
    / \3 S! w( x& `3 Q6 B. q
    [size=1em]14
    4 S( ^5 Z" x  O* ]! B
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    / N( t- S# n; `4 y8 T5 Y[size=1em]     strreturn = ""0 f. Z* D4 G6 o) x' k9 t
    [size=1em]     for i = 1 to lenb(vin)
    + K0 y, n3 {3 I, _* s" C[size=1em]     thischarcode = ascb(midb(vin,i,1)); ^1 x: _0 P1 e& I4 Z
    [size=1em]     if thischarcode < &h80 then" m7 V9 |1 M  g* j4 x
    [size=1em]        strreturn = strreturn & chr(thischarcode)( m  q. z" [  G, C3 s, @
    [size=1em]     else
    1 m0 L  |2 W1 E4 B[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))% p9 w; y7 f# A8 _% O6 h
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))5 ^, f  R/ g' y3 e( N+ j
    [size=1em]        i = i + 15 H* I( F) J- S; R  F2 {4 J
    [size=1em]     end if! E% Q: a0 |; ^) v- {5 K% K4 `
    [size=1em]     next5 K1 E5 {: g" \  R+ V: l' L
    [size=1em]     Bytes2BStr = strreturn
      \6 Z- d4 I% Y* Y3 @# F9 p[size=1em]End Function
    + ]6 }- R' E- g' v" V% l2 G
    7 K6 n) ^6 H; Y, L9 \) ~$ Y
    ' F( x+ i! }; t1 X9 }; f% V2 @" ?
    ) u5 n- {& _- o1 H

    ' P7 N  z# L3 o0 O' s! ]7 Z
    , ?- D7 D: t/ l; I9 Q+ c; u3 D& |, H! }8 _$ j
      3)事件onreadystatechange,状态转换函数0 V) \) z5 c* V3 c5 Q- m" T
      Q6 x" Y) Z+ u- p; K& c9 L0 z
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。# X* j+ c4 x  O) c
    参考
    4 c% I) |- N) y% z% R0 Jajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容. v, e" A, f# |8 [
    & C0 N3 J. F. _& F
      容易出现错误的问题
    5 l1 K* W& i7 G1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。- l) [9 ]0 q. R
    . p: L% r+ i! ?: l: o. S
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    2 i$ F; G9 }1 s& m2 s8 i4 l# `
    3 {! r6 B, [0 B3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写6 Z1 w/ a& ^& ~* n% H5 w4 f. ]' f

    $ |5 \  [* r1 [/ `9 H4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。5 }' u2 P5 f8 K- y- B
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。+ s+ N, J, s4 _& p& B

    & h7 b) R' ?4 m. o# S  对于手写ajax代码一些建议
    7 B) @3 l5 R8 Y5 Y1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。: N; `- T& C8 i  Y+ j2 w$ D6 Y
    参考webservice json. @( J: t1 W4 \  s- B7 ~

    $ t) x* z0 b8 C0 f7 P2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    5 f# M# L  @' q5 j! _* e7 o" L- x/ q$ b$ z/ u3 N
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded/ |; u7 }2 K. U0 V: u

    4 m+ i1 U8 G' x9 i" I; @7 t! I% l4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用1 C7 o+ |8 E' z3 A

    # M2 Y% \  r5 n[backcolor=white !important][size=1em]JavaScript code2 }1 N3 C* t" J% [5 U+ i: ~
    [color=white !important][size=1em]?

    0 [. g- x8 Q1 i6 ^2 v5 @! ]. |; X
    [size=1em]1
    ' V4 c4 z+ o3 J  a
    [size=1em]2

    ( F1 a; {0 Q: b
    [size=1em]3
    ( Y' m6 v# t) `( h# v2 D
    [size=1em]4

    3 P8 ?2 q* F+ W1 T# b1 `
    [size=1em]5
    % c* G0 @/ U6 J; Q0 U, Q/ {  @% |7 W
    [size=1em]6

    % Q7 E' d9 v& J# A. Z- S
    [size=1em]7

    * |, x! |, |" Q1 d& B* b( K9 F( x! S3 |- Q
    [size=1em]8

      s( y+ P1 b$ l7 i" L
    [size=1em]9
      z& r$ m7 Q) b% L! F: ?3 C
    [size=1em]10

    4 ]& g9 [1 V: Q/ ]& p, z" v/ q
    [size=1em]11
    8 l1 c* ]4 A" K# i+ d( g
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");' q- K3 c% ^; c& p1 J/ M$ ^6 F9 n
    [size=1em]      xhr.open('get', 'index.html', true);
    0 L! N) p7 N) a[size=1em]      xhr.onreadystatechange = function () {
    % M+ J/ }. i& f; C[size=1em]          if (4 == xhr.readyState) {
    . g- I& Z" @% o$ w4 K[size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    4 L0 ^9 d8 g( M[size=1em]                  //=========正常返回后的处理代码
    % L# M1 n1 T" U) j$ A[size=1em]              }
    5 u7 f6 Y; K3 _  Q: `3 ^[size=1em]              else alert('动态页出问题了~~');9 C$ t1 Z$ L/ F% p" H1 c# P
    [size=1em]          }8 j# L& L& j1 }5 r, w
    [size=1em]      }
    # G# f% ^/ T; \- ?( N" b7 Y[size=1em]      xhr.send(null);  y& _2 f1 \5 s/ q- i
    7 z4 c- ]2 i& x# ^6 A1 ^. n) F$ j

    ' E+ ]! c1 h: @- i, \7 @4 A0 Q
    ( F& V3 o8 {7 m6 T1 W1 I
    0 ^% ~) k- K0 o( L
      r5 o# n* o7 _( g. v2 V: E
    . B( ?+ i! N  ^1 Q- j, K, d: V  T# X- X1 b# E
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    & b! q9 K$ q5 }: }! ~4 R% g1 I( D如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
      @' a! z" I/ ?$ N) F
    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-26 18:14 , Processed in 0.388223 second(s), 54 queries .

    回顶部