QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1826|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
    2 j  W5 d0 N: y% x  i1 E3 j3 W& e
    . F* g5 ^; v. ]! h  下面是ajax对象的一些常用属性,事件和方法
    ' [: K! Y' X! E) v& I. y  1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    6 H! A7 L. C" h1 `- G, e4 k/ L( c
      ^3 J  s+ b9 G- R* o6 e) x3 [  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    ; Y1 S4 a7 K- T) @( ?/ r$ G[backcolor=white !important][size=1em]Visual Basic code) Z3 i( Z4 H0 X. L8 }
    [color=white !important][size=1em]?
    ' c& J. n! F# W; {" K& c
    [size=1em]1

    ' x- s+ k1 ]1 c/ b& ?! s: J" J! q
    [size=1em]2

    ; u1 k; _7 H8 r) T
    [size=1em]3
    1 c: M: E' M/ A) a9 q
    [size=1em]4
    1 O* v' e* k$ n5 C3 K' g
    [size=1em]5

    8 ?8 p& h! q* f: Z6 r- J- ~  O
    [size=1em]6
    5 e% s  U! u" }1 T1 {* L
    [size=1em]7
    5 ?; Y8 e0 a* U: Y4 N
    [size=1em]8

    * a+ U% y& T6 n  y8 o
    [size=1em]9
    7 c* w- @/ \. u8 _
    [size=1em]10
    ) A' Y# X$ G/ ?. L; \
    [size=1em]11

    * w  [& s* h, ~7 R: d$ A* A
    [size=1em]12

    4 c8 q8 ]5 b& [9 x
    [size=1em]13
    ; P# M% t( ^' k
    [size=1em]14
    - X0 U) ?5 l; a
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    1 }0 t1 p- y: t5 M1 ?[size=1em]     strreturn = ""
    0 p3 r; H7 Z9 ]# {7 i  n4 y[size=1em]     for i = 1 to lenb(vin)
    ; y4 O4 r& A3 ]2 {/ ]4 A[size=1em]     thischarcode = ascb(midb(vin,i,1))
    6 Z$ o4 d* S7 t1 t[size=1em]     if thischarcode < &h80 then% T; c7 W( J4 _: `% ?5 C, h5 @) J
    [size=1em]        strreturn = strreturn & chr(thischarcode); d* P/ G9 J0 H, }
    [size=1em]     else: F- B; l* f! W- i
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))$ j% F$ S  O# ]  I8 D, Q0 J4 l  i
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    / H1 [, l3 d1 k4 V  ~- _[size=1em]        i = i + 14 k* H/ {) J9 g( R
    [size=1em]     end if
    . Z7 D& K5 O1 L' Z& y/ t- o$ V[size=1em]     next: A- W" E: a/ k# p+ M
    [size=1em]     Bytes2BStr = strreturn
    ; O( ]  f) M! V1 @! n[size=1em]End Function
    . I0 p- N# ?/ b4 w
    5 P' k9 ]( O7 N1 o

    4 n. W- L6 r7 [$ o% h$ T# H; K! P) i& t0 \4 }. g& O2 g5 E0 }! V

    3 L- b$ E7 W* X9 h4 i" x+ |% {( d" ^) k* B% d4 {

      T$ O( k, i- n  3)事件onreadystatechange,状态转换函数
    & T' c' Q2 }; U0 Q
    % @: M* t1 ]5 x+ \  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    3 l- ~/ K$ }/ ?% h/ L参考
    ( k: `' f2 v( A. t% h' a, z6 D  @ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容+ Y9 L& m, X3 Y0 H

    4 t8 e8 u* ]3 V  容易出现错误的问题
    / _- C( }9 J' ]' a1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    0 @; J/ D7 i& t+ K) J5 C, Y& Q5 ?/ ?  ]; u& k0 J
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写  [6 K  p% I5 ?2 J$ _
    ( C) p; p7 j; k# o6 I
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写& \# R7 ?  [7 L* Z# J
    5 K! e9 N) I$ L0 L# I- K  O
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    , {: E3 |$ b1 R$ \' ^  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。' b4 e" [6 `' _% ]- U. k8 j
    3 H  c% _7 q! Q. Z
      对于手写ajax代码一些建议
    0 E0 r, w! _. b) q7 o7 D/ W+ r1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    6 m; }& w5 p4 `- J/ D参考webservice json0 g2 P: G* i. a" U$ j
    ' m# b8 J8 w: U, W( g& E
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);  u, h; k5 e  ~! F: {

    3 {. Z) N4 [& a3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded, f8 t: r1 ?7 {! U' q0 f$ G6 v/ q. Z" q
    6 _" E& v# ^2 x8 v+ N: T$ U
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用9 R8 {9 H# M: c2 u3 [
    0 z" n7 r) m5 Q4 z8 ~
    [backcolor=white !important][size=1em]JavaScript code' x& R- O, k# n0 |( r1 D
    [color=white !important][size=1em]?
    & |. p4 S8 j2 o2 }
    [size=1em]1

    ) t/ k) Y7 H1 M
    [size=1em]2
    3 n4 x0 I3 d, F0 m5 k2 O# I
    [size=1em]3
    2 u& I, ~0 f  F8 R( E
    [size=1em]4
    5 b& c8 h9 e1 b" c1 _4 K
    [size=1em]5
    % c- r# ~# }& K" F
    [size=1em]6

    " Q$ P' k8 J, d! y
    [size=1em]7

    & g9 n6 \% P) k3 _! G7 d% n0 ~
    [size=1em]8

    & b3 ~# J3 G& u
    [size=1em]9
    & ~6 E. u/ a# o% v4 C, L) a7 p
    [size=1em]10

    * G! ~* O* [8 j7 v& G: k! |
    [size=1em]11
    + n. S- ~- Y9 H  N* s
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    7 \" d4 T2 G0 n1 P7 f[size=1em]      xhr.open('get', 'index.html', true);: q9 h) z) [" |' y; U) l) l
    [size=1em]      xhr.onreadystatechange = function () {
    . W5 d! S) K- m, p/ G[size=1em]          if (4 == xhr.readyState) {
    1 W& Q: ]1 m0 H; m/ t[size=1em]              if (200 == xhr.status || 0 == xhr.status) {7 `1 p: E4 m6 `! Z. {
    [size=1em]                  //=========正常返回后的处理代码
    : A& I2 Q6 y* ~, D5 ~2 w) k[size=1em]              }
    5 T& o5 ]; M% P) z% r: Q[size=1em]              else alert('动态页出问题了~~');
    - F+ r, p& ?+ b4 e9 f[size=1em]          }. B: x+ y7 U$ ?8 R# ~1 c
    [size=1em]      }, p* @1 F3 `! {) U; s
    [size=1em]      xhr.send(null);
    4 y6 F- t+ x; l/ A' e& B6 Q# J$ R7 U! m' M9 A# G

    5 s: V: Y7 p" p( c: c; n6 D% _, r8 V
    - M, v4 [. K5 e
    0 V7 G% J: {' y8 s/ x1 T! h

    : W8 V( O0 Y5 u4 T
    / a8 w7 |7 D, v1 A# z: @# [2 ]- h5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    3 t9 [: y- z9 M5 O2 y+ W! l如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    7 Z) A9 s& A2 q' T& L5 J3 r
    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-4-10 04:53 , Processed in 0.424319 second(s), 54 queries .

    回顶部