QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1934|回复: 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 V/ z4 L8 C" x* A# k& w, V6 E& I0 H1 v# F
      下面是ajax对象的一些常用属性,事件和方法1 J5 [* ^! A# [' E: l# p4 S
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    9 C; j+ e$ H* _# h: }4 B8 R) X7 {/ [
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  6 z! Z# A. S3 v$ J3 Q+ r
    [backcolor=white !important][size=1em]Visual Basic code
      k( v$ u" z% s
    [color=white !important][size=1em]?
    . k9 v. {3 K. v% X( @7 i  U
    [size=1em]1

    - o! L' |- n' i" Q9 e. h' A
    [size=1em]2
    6 R9 j- b, k: A9 N! |' H# y
    [size=1em]3
    # C6 v# w+ m3 ~
    [size=1em]4

    ; A8 V0 O$ [' q) ?) ]) b9 O
    [size=1em]5

    ; B" d: {# n7 T, n- \, E( x3 Q* v
    [size=1em]6

    ( v3 p' w# @: H: W+ x
    [size=1em]7

    1 H2 [1 N( z. P1 z
    [size=1em]8

    ) A* K# m! g5 y/ E5 }7 k5 m
    [size=1em]9

    1 z, u$ r4 l8 L2 l2 u+ H% y  e
    [size=1em]10
    & Z; a! [+ W# I" A6 ^, J
    [size=1em]11
    7 S% d7 e8 s+ S3 W6 k, P
    [size=1em]12

    ; i8 Y+ V! P; @* D+ e5 P$ u8 I
    [size=1em]13

    7 d) X. G6 H+ h4 G- @7 G+ O$ F; l7 C
    [size=1em]14

    % G6 K! m5 p5 z9 @. o+ ^
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    % o) {( x/ r; U2 Z[size=1em]     strreturn = ""- [3 j2 g. y/ \) Q
    [size=1em]     for i = 1 to lenb(vin): T! O3 B& [% |
    [size=1em]     thischarcode = ascb(midb(vin,i,1))0 q) b. D8 v0 S! z" e% A- j
    [size=1em]     if thischarcode < &h80 then
    6 h; s( B. m7 n, n[size=1em]        strreturn = strreturn & chr(thischarcode), J: v. }; x1 |2 |0 d" }3 `
    [size=1em]     else
    / B/ i; l& R9 F/ o5 i5 _[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))$ r7 |$ G$ w; ~) G" `2 K5 ?
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode)): n: c6 ]! w. h2 T) q
    [size=1em]        i = i + 1
    * n! }, Y" f- R) s; ][size=1em]     end if
    6 T3 ?! s8 [" m! P[size=1em]     next* C& g% a" A4 J
    [size=1em]     Bytes2BStr = strreturn
    / v0 y% J$ Z( `9 ][size=1em]End Function
    ; K  z- Y; Y3 x7 s- u
    $ ?! R* e/ ]' J9 V) ~

    " `3 T, G8 C. I1 Y5 x/ q9 }$ U* I( G, z, M

    1 G  f9 h" u' o8 w$ f1 i: `& d( W' o2 k5 U9 F: `& c

    1 S2 o! b: p6 p7 l0 c4 I  3)事件onreadystatechange,状态转换函数4 q6 W" G! I- }7 G0 ]3 n

    + a6 ^+ L6 h" x: n  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    * z$ r5 C8 J. c/ Z! O" U% A参考
    + V& ^. H+ @5 A( a, T9 w0 [ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容" Y4 ?1 ?$ f+ i' ^$ `; s$ j3 Z

    4 k# }: k- y' J2 t$ ^& ^  容易出现错误的问题  p: e" o5 {( {0 d$ z1 p
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    ; @* ^" j, Q! O1 m: M# ?8 [  I% r, g1 l( [2 U. s) O1 p6 K
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写8 ]" G/ o$ u( F7 S- A, }& H* s3 r; o

      Z* O8 l% ?+ K' T7 b3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    4 [0 v' k7 D' V8 P. z7 p2 W5 q$ v! j, _) |. d. i
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    ' d$ ?7 \8 \& C* `  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    5 |6 N0 _$ ~; h9 P0 o8 }
    ! f2 h- R9 F( T4 I  对于手写ajax代码一些建议3 g+ v; T& j* w* r, s; ?. S
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    * h2 f' D6 I/ `+ \# @# s. t  H; c# }, M* S参考webservice json
    + U! B; ]: X4 X) x: x1 K1 }0 W: @* b8 j  ^6 x) m% E
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);# D7 \5 b& O1 k, Q

    5 B3 }5 u, B- z5 P$ g1 X3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded! x3 p( \5 R' g4 Y  t* t
    4 G# B2 C& M6 f- M6 r9 e$ T
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    ( |: f% t1 i$ S0 ~; d5 r$ n9 A# e, ^: W. D& i! ^6 r
    [backcolor=white !important][size=1em]JavaScript code2 a% G1 _2 n0 N& [: e" H
    [color=white !important][size=1em]?

    % P+ ^. b5 x4 _' I9 x
    [size=1em]1

    " E3 t( P; w& z  E
    [size=1em]2
    5 ~' T% i  P6 z
    [size=1em]3
    7 i. [7 D9 \7 r2 r8 g9 ]
    [size=1em]4
    7 Q9 s7 S3 U; X; a0 X6 e
    [size=1em]5

    2 u6 H% T, M8 m* \: S3 }5 P
    [size=1em]6
    9 L- V  a% w) e* w+ |( O
    [size=1em]7
    9 H9 \. D# N) u7 \0 S$ `2 {2 ]
    [size=1em]8

    5 j; }0 _( y+ @6 j
    [size=1em]9
    " o4 i' B. o! X( ]
    [size=1em]10

    + l; f+ o0 j7 v2 i4 N0 A  d* ~
    [size=1em]11
    # _; D+ _# V' _( g5 E, S
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    ( G. I' l, y8 k9 ?, K; A- h2 W6 ?[size=1em]      xhr.open('get', 'index.html', true);8 o* o3 t' m! u# W
    [size=1em]      xhr.onreadystatechange = function () {* y& E8 O* j5 i+ J
    [size=1em]          if (4 == xhr.readyState) {$ C5 l- w  t* P* [+ v2 q: i
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {  R$ g; O' h& P$ W: k' f
    [size=1em]                  //=========正常返回后的处理代码- G8 i( q$ ^( B
    [size=1em]              }; V9 e4 B/ Q8 w7 z7 e; K
    [size=1em]              else alert('动态页出问题了~~');
    6 |% m9 W$ K- V[size=1em]          }1 Z0 ], x: b, X& T- J0 l/ r
    [size=1em]      }# G" o4 g' R2 c! \# P2 v2 T& j
    [size=1em]      xhr.send(null);: O9 V) J- y5 _2 Q/ s! B+ x
    , \% d+ L# U* u7 D) F$ X6 U8 \
    5 [2 M: e  j8 b
    + l) U) `9 t4 _  B: A  t3 g$ b2 [. j

    # T1 X2 a1 K8 q) z( ^
    : j& n( U& O# b
    + W3 w0 {+ O) D, O  i! q- ]. y. Y. K* z8 w( K0 j" U) h- ~6 Q
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    7 w: X& L& c6 b% u* T6 l$ M如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    - U; o) v( @8 k" N$ ?" S' d
    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-9-2 17:44 , Processed in 0.427295 second(s), 54 queries .

    回顶部