QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1856|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
    & c! r+ G+ ~& c* n! a
    ; X/ J( O* w# r$ R: p. t  下面是ajax对象的一些常用属性,事件和方法3 h2 U& y- R8 t) u: H7 a. ~! Y
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML$ I2 p" C# S3 \( K
    7 F" q7 P0 a+ ?9 G. K' w. B! P6 `
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  + G" V' m& X8 G! N$ v; v/ K
    [backcolor=white !important][size=1em]Visual Basic code; t- L2 g. v' i
    [color=white !important][size=1em]?

    . |) J6 V. y( S" M# I) I) K
    [size=1em]1

    ' I1 [& ?  R( v
    [size=1em]2
    + D# d: @. J+ H" P! _. l: x
    [size=1em]3

    - ^/ ]% w- ?' ]- }
    [size=1em]4
    : b$ T$ Q# D4 M# p; s# S7 E2 O
    [size=1em]5
    $ F+ ~% n7 \/ ]$ i0 A! d
    [size=1em]6

    ; P; c3 i5 X2 s3 h
    [size=1em]7

    ' e; I; Z0 i; \( r' a2 D4 A, y
    [size=1em]8

    " q7 i4 z9 q. U* ]5 x. W
    [size=1em]9
    $ w2 ~' [( z+ N6 Z
    [size=1em]10
    3 v* n$ ~% t3 A" h- {
    [size=1em]11
    ' ~* i6 G& T" g) \5 {, E* K6 O
    [size=1em]12
    ; x* h* G5 ]& e& \" U
    [size=1em]13
    , {4 a3 }9 P9 J3 p2 Y' q! q  ?4 U6 M$ D
    [size=1em]14
    / `& O, g/ j* f! |. f$ ~$ l
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    ' D, l- a4 z6 M  C4 f[size=1em]     strreturn = ""7 }3 n: w3 h% V2 B9 g
    [size=1em]     for i = 1 to lenb(vin)
    8 |# d) h' a2 g4 g1 \" q9 y[size=1em]     thischarcode = ascb(midb(vin,i,1))
    3 J# [5 s! X2 g8 k[size=1em]     if thischarcode < &h80 then
    ! J* a. O- Q1 n[size=1em]        strreturn = strreturn & chr(thischarcode)
    3 K/ l( }  C; Y2 _- x0 V1 `8 Z[size=1em]     else9 {  W/ G5 c* c
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))
    9 k2 G8 R. t0 S3 ~9 C6 [[size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    2 k# g: ^0 S2 E" {; G0 r' s[size=1em]        i = i + 1, Z) I8 \$ S/ |% f1 r' t1 c) [3 ?
    [size=1em]     end if
    ( p; E7 q+ L% E. L[size=1em]     next% ?  e. f; z* \  V7 y
    [size=1em]     Bytes2BStr = strreturn: O( T$ q) ^. Q  N0 K
    [size=1em]End Function
    / {# q4 p* H; ]. m* @7 W+ G4 a6 S! q1 l& m2 g  z( L/ {! `
    # D* D; O$ T. c! ]3 j

    6 B! z6 F) Z# _) G
    9 ~2 G. i& ]$ r) C1 f" {# S0 X+ H) b6 w1 y: q/ \* J

    : N" Z$ l- v" |& B# y: f  3)事件onreadystatechange,状态转换函数
    . w; B( f) ?" U3 I) J) a
    9 L% y; u1 m% B! R+ }  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    , x4 S7 d8 W: @/ {5 W参考. F  {0 ~( y) o& B
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    / S' }  A) f9 P1 r* \9 K$ g" G' ~; x' J; S# ~% L4 p
      容易出现错误的问题2 K* }" Z( {! c4 W
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    6 K6 i/ X5 ~* R$ R3 S
    . |+ C6 k- Y- ]9 [9 v* U- |: _$ `2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    9 O* Q7 H* K% z; L. @9 M9 O+ ]+ f2 L! A' K4 R2 J+ E
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    " a% p# D6 }, J' g$ g4 S( J3 q
    ' f) m/ t1 }3 H7 i$ U0 K0 h3 B4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。- K, J! {0 k* K- ?& F
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    0 m/ W# e" [: v9 s/ |. r) |: I; B: u
      对于手写ajax代码一些建议
    2 h6 y$ H$ h9 w$ I9 T1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。$ X. s  Q( K1 x
    参考webservice json
    , }7 a+ j* y* `5 T) X
    ' z9 g6 D+ G; M' ^6 D+ b( u, l$ f2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);! G. B3 c) i0 N

    7 ~% p& G- H! Z  S3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
      t7 v% U4 ^9 a3 x% Q. e( t" x/ J) r: V# y- ^: [/ {! }$ \
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    7 N, u& ?0 x! E- P$ v% u* h+ N9 W, I+ ~
    [backcolor=white !important][size=1em]JavaScript code
    0 Y+ G- }- m3 f8 I- Q# J/ L4 b
    [color=white !important][size=1em]?

    0 S, R9 u/ R" G2 e  N( G( s  y
    [size=1em]1

    ! [1 y* C  S, z( H2 F0 L
    [size=1em]2

    9 _0 a. Q  A' B! [) T5 o
    [size=1em]3

    0 a5 _2 o# {  g3 C+ M
    [size=1em]4
    7 L2 _" x" O# S* u
    [size=1em]5
    - u5 |' j* v8 N' {
    [size=1em]6
    ! Y0 Q2 p2 A9 E: o# I5 p6 L
    [size=1em]7
      o0 K) R. f' I7 m: L
    [size=1em]8
    3 T2 ^4 M  y0 w+ Z- [
    [size=1em]9
    2 m6 Z5 H5 Y6 \6 L/ L5 c4 V) J
    [size=1em]10

    # s" m  `5 O  M5 A, \, I
    [size=1em]11
    9 ~* Z7 E& ~7 q/ o
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    0 U+ H) l) |1 @: Q[size=1em]      xhr.open('get', 'index.html', true);% _# ]2 T4 b: A7 C8 C$ p* s3 A
    [size=1em]      xhr.onreadystatechange = function () {+ {& V  M( S+ H" z% l
    [size=1em]          if (4 == xhr.readyState) {
    9 j& y2 L! ~/ J' M1 ]( F[size=1em]              if (200 == xhr.status || 0 == xhr.status) {( g3 W, k* K  }
    [size=1em]                  //=========正常返回后的处理代码
    9 z2 w+ s, q1 M9 T& r[size=1em]              }( ~5 R8 p; e+ p$ z
    [size=1em]              else alert('动态页出问题了~~');0 d) e2 r2 e* @, {$ ?( L& G, k) W
    [size=1em]          }8 L7 K  S" i) Y" p7 f
    [size=1em]      }% v' w8 H; _6 V/ ?, V
    [size=1em]      xhr.send(null);' B' i4 y4 G$ q* S! O

    ) W# A3 v! T+ j( w4 @: s+ u4 {7 B

    % X" r9 d* Q+ {& K# Y6 g2 @* G9 _/ {5 u4 N' R; N" {
    9 T7 \: V' W# E" J
    2 b2 _% r* b% g! a: ]# I; V

    5 x+ B- w( ^6 \
    % m: N0 z- l4 K( m2 E+ J/ A5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。2 f- a; X2 f! H  I$ j
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    " t0 u" Q0 k4 y% H
    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-25 06:49 , Processed in 0.466933 second(s), 54 queries .

    回顶部