QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1885|回复: 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 f, H* {( h, e* X: b9 [, h5 E" q' y' W2 u6 B$ R
      下面是ajax对象的一些常用属性,事件和方法
    % ~5 f2 x- R8 l0 E. f4 B: m$ O  1)标准的ajax对象的属性有readyState,status,responseText,responseXML+ A  K  K% A6 r% X9 A; j, j% @

    8 p: L# I8 l9 x7 F; u; E  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    & I2 f1 j! O+ v1 R  X[backcolor=white !important][size=1em]Visual Basic code: b+ \/ N5 f! G. `& H3 m, O
    [color=white !important][size=1em]?

    ; ^+ a- [( Q% \+ e
    [size=1em]1

    & |9 y( v: t0 z* T) l
    [size=1em]2
    6 v, V5 ]+ p; H! H* L' C
    [size=1em]3
    ( k4 {$ ]2 A7 M. l# j) ~  I( C
    [size=1em]4

    5 l4 {0 s, a' C# N8 s1 `, x
    [size=1em]5
    / J9 P, P  N: \# C7 O' K% j
    [size=1em]6
    " C; S$ a/ e. O* x% i
    [size=1em]7
    ! C% Q  A: y. j! p# _3 c4 D
    [size=1em]8
    $ B% Q7 s$ F6 N, I' ^2 r
    [size=1em]9

    * t8 K* J! a: P" t# s! P: U
    [size=1em]10

    ; s+ d* X8 E% C4 c
    [size=1em]11

    ' B* E  R3 u1 b+ r: P1 w
    [size=1em]12
      y* M3 C+ e2 b5 B; T
    [size=1em]13

    ! P1 o) O" J5 I4 U
    [size=1em]14

    6 a3 U) v4 p7 w4 q- q
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
      s( t, g; ^0 r0 u8 O[size=1em]     strreturn = ""+ T1 ^0 E7 l- S6 t! C$ u
    [size=1em]     for i = 1 to lenb(vin)8 V: d1 R9 \! r1 Q, t
    [size=1em]     thischarcode = ascb(midb(vin,i,1))
    6 X3 ]) M, G7 M1 a[size=1em]     if thischarcode < &h80 then0 I( `) Y# F- c  R
    [size=1em]        strreturn = strreturn & chr(thischarcode)
    8 k. Q* o( |- M0 C, w[size=1em]     else
    ' L/ U% x+ [+ H- [! E[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))
    5 S4 Y$ I  q+ i4 |: V[size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    & [( |# e+ A* ^2 X  V7 O5 ~, R( S[size=1em]        i = i + 1
    6 N- g/ N% f5 e3 C[size=1em]     end if
    # o. l2 U: z8 [9 K" w[size=1em]     next. w1 Q; _2 g9 w. E5 b% W7 l
    [size=1em]     Bytes2BStr = strreturn4 n1 B& \8 W- [
    [size=1em]End Function4 k  A* x& T1 K% L. M

    2 T4 x# M2 j% |$ k3 ?) r

    6 ?% ?8 C7 I; c8 c# D) ?2 C
    9 e; J/ c6 ]. C: {
    # H% x) ]; v8 ]% `+ N4 ^# t0 Q" T. z& x/ p1 j' Y. Z, ^: x
    ; w% e/ n8 o5 _2 Z3 l! V) p
      3)事件onreadystatechange,状态转换函数* g2 ^) A. @5 I6 P7 d2 Q% p

    ( y  H& V  X  T6 o6 Y2 A9 K0 {  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    ' F: e+ x9 P9 Q/ w6 _: d参考
    5 [& d2 S/ o; A# iajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    ; p, m- N3 B; X+ i7 `0 `/ i# m& ]4 j
      容易出现错误的问题
    * }& j7 K1 z: t- S# x1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。0 {. ]8 E- H; @8 b$ u- s
    $ e( W( ~% D5 R* t
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    ( v; H* h$ H. p+ [% k. B6 m" z
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写% V7 i$ K8 Z2 b. L- ]2 R
    5 ?5 z9 g- p+ x: f; \3 }2 h& |
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    ( \( {% V/ {* X8 S& D' ^6 k0 U: H9 z+ m# s8 X  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。8 L) d( i" w/ z3 z" ^+ r$ Q6 B: m' m

    ) b, _. V6 `& ?& L  对于手写ajax代码一些建议! k, D4 N# J( Q* ~- J- X$ p6 B( H' e( w
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。1 f5 _/ b& P) X: k4 V/ o4 _
    参考webservice json
    / Z- W1 V9 K' l* B. l( P+ b  X6 ], v  ^
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    , a3 }% j* a) b# Y; u5 ~
    0 U  `. t8 W2 Z3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
      w! @5 i( x: E' K2 Y$ z/ a3 g7 c0 W! P! ]7 H! `$ T& h4 a
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用! R& j: T8 ^1 D, s& A2 @3 n) R
    # R, O1 ]4 p+ M! ?/ Z! o+ `+ l
    [backcolor=white !important][size=1em]JavaScript code, g& H3 }9 D' T; q
    [color=white !important][size=1em]?
    . c+ W& {: B' B$ f/ p
    [size=1em]1
    9 E5 l2 O/ X! B7 U4 q. }
    [size=1em]2

    3 p: p: w, `3 O* O! B2 e
    [size=1em]3

    ' g2 z0 l/ G2 n6 Z
    [size=1em]4
    7 B5 r8 w, W, j" [% N- _- _
    [size=1em]5

    6 A8 Y0 \. [: f6 i
    [size=1em]6
    * z+ y1 L3 j0 w5 {/ J
    [size=1em]7
    ! i6 ]2 T$ \; |* @% U" D/ J+ z
    [size=1em]8

      k/ j  b; ?# w; N4 S
    [size=1em]9
    4 d3 s0 C& T9 z2 b
    [size=1em]10
    ' D. w, F0 B# R, G
    [size=1em]11
      l$ ?6 Q+ g! |. `+ {1 p) ]
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    2 x  Q" N  ?2 w- E5 U( [[size=1em]      xhr.open('get', 'index.html', true);
    " m. e3 g1 C6 s  [- V[size=1em]      xhr.onreadystatechange = function () {
    5 N1 h0 p2 ^4 l, v[size=1em]          if (4 == xhr.readyState) {
    ! N6 S" i, |$ U. r) L* ^[size=1em]              if (200 == xhr.status || 0 == xhr.status) {5 J" t) W9 V6 h1 s
    [size=1em]                  //=========正常返回后的处理代码8 V4 r; A, |/ Z, ]* R' E
    [size=1em]              }1 o& j) I+ {) g0 a1 W! _
    [size=1em]              else alert('动态页出问题了~~');
    . \; e( T- l- ?% s[size=1em]          }
    . G: G9 y! Q8 k! j[size=1em]      }$ {/ d* B0 e& ?6 O/ z
    [size=1em]      xhr.send(null);
    " e, v: `% E1 D5 d+ t
    ' X2 U4 n' _$ w5 B1 s" i4 H2 w
    2 y+ Q7 y: t1 z& }. [9 P
    $ Q7 r9 ?! d6 ~

      Y# H9 w0 l& ^% B8 {  R7 J% l; r" \* p, x# L' R
    ' j" E% [/ S" J

    9 V( C7 ^1 r! U; @7 f, J5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    2 O1 h0 ?& ~; b% D& [% k( f/ T2 {- ~" L如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。9 |2 l6 `1 ]& C" 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 22:47 , Processed in 0.711877 second(s), 53 queries .

    回顶部