QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1878|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。7 }7 L4 F& z% ]  e# e
    3 }& Q. Q  V" q7 D6 v* Q* H& ^
      下面是ajax对象的一些常用属性,事件和方法5 l, r6 l$ F. C: C2 d7 L  S1 M) @: ]
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    " s0 E% H, d* O3 ?! d  c, e$ b
    - D+ T3 j0 b6 `# Z+ @  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  6 F1 M' T: w) T. Z/ W/ p0 `5 Y
    [backcolor=white !important][size=1em]Visual Basic code6 p( F* M' k1 n2 f
    [color=white !important][size=1em]?

    2 h1 y$ j8 ?5 Y0 k5 |3 I; s0 n
    [size=1em]1

    " I6 i& V. g+ n2 g3 k4 S
    [size=1em]2
    / x5 q: g5 w9 c0 m
    [size=1em]3

    * M% A& ?2 n: ?3 f* s( _
    [size=1em]4
    2 T8 I) B7 ^* E, B* `) M% R( O
    [size=1em]5
    : |* v% C+ I! m% V$ c" ?
    [size=1em]6
    6 L9 G( K$ @1 u# Q8 q" ]; \
    [size=1em]7
    ' D- Z. l: g1 {" `- v$ u
    [size=1em]8
    9 C% ~. U! w& v1 M' D0 r" J4 B
    [size=1em]9
    8 ?3 y  t$ c6 Z3 @( i
    [size=1em]10
    ; F5 h, |* R6 U  O( Q, m
    [size=1em]11

    ' m) g+ p) i/ A
    [size=1em]12

    7 B# F) c% P8 w* z' V  z
    [size=1em]13

    5 H5 G: V  p5 ]
    [size=1em]14

    . U9 |6 {* w; D3 {- E
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串" z: X8 ~1 T" I/ S0 k
    [size=1em]     strreturn = ""9 p$ `$ G2 p0 j: B2 N; K7 K: T
    [size=1em]     for i = 1 to lenb(vin)
    8 T% z. Y5 P7 t) @. r[size=1em]     thischarcode = ascb(midb(vin,i,1))& T6 D7 Q/ j( j- T" `' y2 \
    [size=1em]     if thischarcode < &h80 then
    $ t1 o) s, x6 ^4 m$ p[size=1em]        strreturn = strreturn & chr(thischarcode)
    9 H% K# B9 Q4 {3 {1 t[size=1em]     else
    ! S+ P/ K# V% Q9 R  u[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))* q: H1 E* B& v) p7 Z
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    + B5 ?8 g4 K) Y[size=1em]        i = i + 11 `6 e" Z* h$ ^: R$ W; c- E# O, z- z
    [size=1em]     end if
    4 l0 `- _0 C* f- F& f7 s- T[size=1em]     next; j, |3 g6 L. Q" W, d; v
    [size=1em]     Bytes2BStr = strreturn
    % w- _1 S5 ]6 Q8 f0 w1 O[size=1em]End Function
    + |5 _! S% T* H* z+ z
    . U2 ^$ m% X  Y6 g+ P$ W9 _9 G

    ( U: E$ f1 _0 J6 {( b6 J) }: t8 ~4 e/ {2 H: i- H7 y$ W8 v4 w5 `4 f
    7 [. _3 s6 l) v: r3 q3 K$ p$ G& G) c  n
    ; m+ ^9 s$ x$ L6 S$ V. w* k1 b  q. F

    5 M: y) |; B0 t- u; k$ G4 }  3)事件onreadystatechange,状态转换函数, z5 S9 l1 A% j# Z' t& y0 c
    # t, L7 }. ~( X
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    . ^7 t. `0 ?- E, ]; ?参考) g3 c$ M. l8 m  o- i5 }
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容& {) c( P, k* J
    4 G7 v5 b2 n6 g) V8 V
      容易出现错误的问题
    , S- S$ e& b$ M9 C: |& M) t8 Q1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    6 E: J; K  p0 w- L" o7 b) o& f+ f1 k& P6 S9 x) Z4 r* b
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    ' Z1 h6 n- _4 _! S% A, d4 Z3 N- [: E) a% j
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    % P2 [, ~4 H! E- I& u
    6 Q) P0 ~9 b# y3 L6 A2 M4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。2 j( X& N7 z6 f' M1 o3 Y" K; i( y
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。/ p) O( S+ _" T

    " X2 z$ L; H0 ^) {' a2 @* E  对于手写ajax代码一些建议
    " e, i3 b8 Y- j8 w/ [1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    1 n+ ]* K( T2 w: z1 j, ?. L参考webservice json6 F3 m; |4 P! b% j  B4 Z/ f

    * E6 m# U; y! E8 M$ _" [) H. @2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
      X6 C7 C. `& ~4 v* `' b, v: `
    $ z8 _" J) c' n1 h/ N3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    0 Z) Q# B8 \; U7 B
    7 E' `* A; V; M/ K/ `5 v7 x0 X) z( @; U8 _4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用2 c; ]3 ^% W: [& [% M
    / b" `: u+ u! F
    [backcolor=white !important][size=1em]JavaScript code- S4 B+ t! b, i9 m4 q% |
    [color=white !important][size=1em]?
    $ c" e3 [" s: {, S) [5 H, P% g
    [size=1em]1
    , Q  G% u) F* V' [
    [size=1em]2

    " p' E, E1 [0 l
    [size=1em]3
    . y3 v% v; j' i8 G* G0 J% s1 q
    [size=1em]4

    ! N( P) C( i" \2 w/ O
    [size=1em]5

    ; N+ G( W$ G' q
    [size=1em]6
    . r2 U, ]; j6 j& `
    [size=1em]7
    ! y- S0 V( t9 V. j
    [size=1em]8
    * d: M0 T% i; Z; z3 D
    [size=1em]9

    ' F8 E# J" d7 k/ k. |7 [; Y# Y
    [size=1em]10
    + W0 X. Q7 _# E) S
    [size=1em]11

    ) u) a" B6 E% W# c! R4 [
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");) @2 K6 c( [$ P( `! D
    [size=1em]      xhr.open('get', 'index.html', true);
      K% z2 W* T! x4 G[size=1em]      xhr.onreadystatechange = function () {9 _9 l2 X( c; c( s" p, B& A5 t
    [size=1em]          if (4 == xhr.readyState) {
    3 }6 W& O9 r; U( M[size=1em]              if (200 == xhr.status || 0 == xhr.status) {1 P: e/ K/ W  T0 L! w& ?% b5 Z
    [size=1em]                  //=========正常返回后的处理代码
    % i* j4 V' [7 z3 T3 `8 T: X9 k. S[size=1em]              }
    " ?% j9 T! H2 h. F* A[size=1em]              else alert('动态页出问题了~~');
    : Y7 l' o' _: l3 m% V) A4 k[size=1em]          }3 {' o0 {4 t8 \5 n# y
    [size=1em]      }% d5 ]# Z) i+ N/ C) |0 z
    [size=1em]      xhr.send(null);
    / Z! A( y. q5 ~" ~; W2 V2 G+ F+ e0 G/ |) E: C$ U
      U, [6 G: P5 U  n' j: ~

    ' H1 }( |4 v: J4 p4 [3 N3 J% e  I6 a" U0 O8 Z5 d+ C
    # x' [/ C0 x  X* n
    ( O  b' e1 k, m7 X: f: `5 B

    * B: `- f0 {' Q8 n4 ^5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    4 X# l1 D6 O% c( ]5 g如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。$ y2 @2 ^+ _- l
    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-9 17:36 , Processed in 0.404729 second(s), 54 queries .

    回顶部