QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1634|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。0 a3 N( y9 D) t8 H3 q4 |( P

    # W$ N2 B  Q* O/ a3 F) F8 U  下面是ajax对象的一些常用属性,事件和方法
    , x" P! i- P; [% K! b$ |  1)标准的ajax对象的属性有readyState,status,responseText,responseXML( D9 A% O8 o5 Q

    * E6 K# I% A' Z7 [. o! w5 d! P3 W  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  5 R" g- d6 I" b2 z) `# l/ G
    [backcolor=white !important][size=1em]Visual Basic code7 G+ ?2 d) ^! M' Q
    [color=white !important][size=1em]?

    : p8 y. F3 m2 ~7 ^3 U) l
    [size=1em]1
    " U- O6 _; b$ t5 R" ~
    [size=1em]2

    + F2 w0 J" P! v* \* P6 m. F' _
    [size=1em]3
    . n& _( Q7 F( k5 d
    [size=1em]4
    0 ?* d; B& _( @% k* [
    [size=1em]5
    9 x2 \5 B9 m+ b  O" t+ E! t
    [size=1em]6
    ' ]; |7 |, g. _% v4 g/ R3 t: f& q
    [size=1em]7

    5 U: e6 `) w3 O2 m+ q
    [size=1em]8

    " G4 h% u' q1 a+ Q( S
    [size=1em]9

    $ x1 k" e3 s# w" |; V1 n
    [size=1em]10

    & M. g1 X8 V( c/ q3 ?
    [size=1em]11
    2 F5 ^; J* Y0 L
    [size=1em]12

    2 _1 v% n3 ?- Z9 `- v# ^
    [size=1em]13

    " i/ ]' \" ]; `9 g0 K
    [size=1em]14
    7 Q1 X! ]4 l( a" n  P9 _8 }# I
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    $ u: b$ Y2 n9 c1 q' |8 F[size=1em]     strreturn = ""0 k  `5 k5 ~5 z, v4 N% W
    [size=1em]     for i = 1 to lenb(vin)
    0 C- J6 E/ H8 u3 ~9 ~/ t, N[size=1em]     thischarcode = ascb(midb(vin,i,1))7 l( l' t+ s9 W% c8 c
    [size=1em]     if thischarcode < &h80 then' m1 e4 p) F$ y, o/ H
    [size=1em]        strreturn = strreturn & chr(thischarcode)
    " U3 ?% P6 X7 O% g2 S[size=1em]     else; ?* \6 a8 O# i3 d
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))% }& d7 Y0 {6 z& W: @
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    " _' Z  m' k" _9 ~0 t% \; U[size=1em]        i = i + 11 |1 u2 X. d/ q) Z* V/ M9 q0 m
    [size=1em]     end if$ T$ f1 E4 y2 ~3 y0 ^. g& o# p5 w
    [size=1em]     next
    9 J& R+ `9 ]5 P, ~  E: R- Z5 V" g[size=1em]     Bytes2BStr = strreturn% b: @+ x9 K  Y
    [size=1em]End Function
    9 _2 F" A3 g, {( l3 {0 |$ [$ Y; P" X5 A( X# U2 c# i
    3 k$ T0 n# Y' G  [# ~7 k0 `
    ; K& m+ F4 A2 d2 C3 r6 B- U9 A

    8 W' C6 u! T; \& t& U. @" b8 k6 Q$ W, ?' F( U

    $ B* M$ i- Y) |& z2 y  3)事件onreadystatechange,状态转换函数$ s9 F. G6 R, |0 v& D( O
    6 I1 e: D7 L1 {$ j# Q' z2 ]. T0 A
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    8 D. C! ~. `" E) g$ C! X! p* B3 J5 Y; ]参考
    # h  ]% {7 a/ J! h  |ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容8 I. O, G. J& O/ a* f+ M1 B$ q

    ' c9 h$ X$ _5 D5 P  容易出现错误的问题, {. t& r: [- W2 w3 T, q
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。8 i4 q+ B1 G1 {  x0 v

    " H3 f9 M# S$ S4 h4 v" a) k2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写( A4 U6 I% @% }" ^3 U4 _. c5 d, b* ^

    * ~5 V# m; T! r5 N3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    7 y$ Y' p' E6 F" g  i8 C- b) E) H" y5 {: M7 k
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。- y5 G8 |; w( e) e' [8 ~, E# ^/ @  ?3 j
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    / n! M+ v: ?: X6 \* b
    1 ?" M* ]3 e1 p+ b) \  对于手写ajax代码一些建议+ v7 _2 V; K5 V- N
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    1 `* _! O( T9 m3 T" P' Z! x, \- e参考webservice json6 ^( f; ]2 B9 r9 i& f

    ' Q0 d6 |7 g+ e2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);% h3 n, j) Y" m9 i. F6 ?3 Z

    $ p8 x4 ]0 x9 [# b3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded7 ~& u, n3 t+ v1 h. b

    4 o6 E1 W" R+ U: W6 P7 A: q* ~4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用. Y1 L  \: J' }# z
    ! V  M0 m2 ], e7 o4 w8 r$ j
    [backcolor=white !important][size=1em]JavaScript code
    ) O* K8 v" S5 M5 n
    [color=white !important][size=1em]?

    ' R& f4 a/ }( |# v1 i. }) _
    [size=1em]1

    ' i. i3 G1 X6 x. @* ]
    [size=1em]2
    " L9 A  n/ K$ o8 b" Y
    [size=1em]3
    4 p- N( N% s* |
    [size=1em]4

    . n! [- P" r' @; W9 Y0 }
    [size=1em]5
    7 S! n; P" s; W5 ~
    [size=1em]6
    $ U3 Y: W: T6 Z0 f0 I
    [size=1em]7
    - e; r7 e+ Y, U4 ?9 v& t1 H
    [size=1em]8

    ' u9 q- o, G9 T$ y4 R& U8 t- a
    [size=1em]9

    . w2 ]% b$ Z7 c0 C
    [size=1em]10
    - [+ \8 [) |4 }( ~. l: z- N/ E
    [size=1em]11
    . _2 ?2 g' T  V. A
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");( u* \) w1 U2 f6 H
    [size=1em]      xhr.open('get', 'index.html', true);
    4 G6 X2 N" o) d+ \* m[size=1em]      xhr.onreadystatechange = function () {* X" L* \7 h) e5 L( B( B  a% w
    [size=1em]          if (4 == xhr.readyState) {5 R! C2 z! J! D# k/ Z) A
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {& ^( b+ Z# v+ D
    [size=1em]                  //=========正常返回后的处理代码
    8 ^$ H6 O3 M5 z, l2 O6 M[size=1em]              }
    1 }; i. B$ V3 ?3 Q[size=1em]              else alert('动态页出问题了~~');9 o$ b: x  Q9 T$ W+ _
    [size=1em]          }2 P# R. i& E4 h
    [size=1em]      }- w6 e, _: X8 k/ h; Q
    [size=1em]      xhr.send(null);
    . a7 x; F  K$ }0 k
    3 \- `& m5 a# D/ U& ^% w

    9 P2 ]; ^7 L+ c# x3 M- @6 i% \" C- Z/ n: i# y
    1 d! q2 J$ j* H' b2 s2 @  M

    - T* h3 x, d6 [, ~- @, s; b, {. ~

    4 Y3 `* y: p7 {  M5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。3 D- R+ }, R. Q/ {8 C' _' U1 f: I
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。  B0 w. S% m* z- G% n4 Q
    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, 2025-9-18 07:04 , Processed in 0.515157 second(s), 53 queries .

    回顶部