QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1880|回复: 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 N7 Y" p. q) o# k/ d. E, F
    2 v4 C5 N3 C0 r( m% a
      下面是ajax对象的一些常用属性,事件和方法
    3 ^7 `# `5 W& O7 u3 V. d  1)标准的ajax对象的属性有readyState,status,responseText,responseXML$ V9 `* m7 y  o0 h4 n1 n% }

    7 n3 z& ?& c) Z9 X  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    6 y7 s0 k2 v& X. u# F4 Y# P1 W3 J) x[backcolor=white !important][size=1em]Visual Basic code0 J1 W; G2 g* p9 j# z2 h( Q
    [color=white !important][size=1em]?
    - E- j5 T) i! [5 e7 T' x7 ]
    [size=1em]1

    # v7 T: Q/ U+ \+ w) `+ }* Z
    [size=1em]2
    & x8 Q( n+ Y/ a' W+ W6 @6 b, v' E
    [size=1em]3
    : G/ a+ c! `, s0 Y% _6 d
    [size=1em]4
    / [8 D% K; v# R
    [size=1em]5
    * C9 |, i+ j3 C" i+ X
    [size=1em]6

    0 e. a: U1 D" E, _& n  J9 D6 j
    [size=1em]7
    1 J$ T9 }3 h& t  l
    [size=1em]8
    " |; P, E- o  U# r& G' V
    [size=1em]9
    * ^) k, n- a! ^$ \* {2 x2 Y6 w
    [size=1em]10
      x8 A& M1 l, l2 z8 n  \
    [size=1em]11
    5 {4 Z8 a' Z! F0 Q$ S  N
    [size=1em]12

    1 }7 Q1 j3 P4 B& S/ v& t! V, l
    [size=1em]13
    $ q& b& K/ {5 A
    [size=1em]14
    . J+ S( F7 F7 `+ k
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    6 a9 |! L! F  n) [[size=1em]     strreturn = ""
    + N5 g5 {5 V. X[size=1em]     for i = 1 to lenb(vin)' @; m" q1 _2 W4 N
    [size=1em]     thischarcode = ascb(midb(vin,i,1))
    , G( r" S# H0 N! o& |. G[size=1em]     if thischarcode < &h80 then
    / t" F3 B( t6 q3 ~6 e[size=1em]        strreturn = strreturn & chr(thischarcode)
    : Q( o* B: \- W: V[size=1em]     else9 s; N! K- C! @
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))
    / M% b$ L( ]0 b[size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    ! S- ~& u! x$ {; q; Z9 a6 l[size=1em]        i = i + 1, ?5 k4 j9 y% L" v0 `
    [size=1em]     end if  B) l& w# q: R0 ?: Z6 j
    [size=1em]     next5 p* U& m" B+ Z: t% E* g& b9 z
    [size=1em]     Bytes2BStr = strreturn
    5 T; `- |6 E9 P: m[size=1em]End Function3 B2 a. a2 V2 d5 _: i" T

      [# w6 K8 L" T6 w' Y' T
    + S- Q+ q0 d+ q1 U5 `6 R2 l6 r
    / ^4 M6 ^6 ]5 ~& a4 G/ Z

    6 g/ j5 a7 i7 h) D" }
    & q9 @! W" D8 R2 G* F0 I( G+ B" x
      3)事件onreadystatechange,状态转换函数
    , v- F; L2 `1 S$ B
    + S3 P- S" ]# _$ e# V  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。  P& Q7 Z2 u6 y) I( m3 |9 `
    参考
    7 _0 H, A3 w$ G% l. Uajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容4 B1 s7 v3 ^. i& b8 Q
    4 `$ H* t3 J, x: p8 y6 R& _
      容易出现错误的问题
    ( S0 p/ D3 l3 Y$ i4 V0 ~: J1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。: z# G% \3 O1 n+ C

    : S4 W- F$ p5 Y9 e2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    # {  x4 I$ a& Y; B; {8 Q/ V/ H6 d' ]$ {7 Z; E" `) V
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    % W2 s9 v9 ~. [6 ^* u4 r6 Q
    " X2 h1 G7 h' v: _* n1 S1 r4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    ; s" I0 v6 g$ S  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。5 i5 x( i: N6 h* G' ?7 D( G# P4 |
    ; g5 L* H& o8 H( e6 d+ W% h, ?
      对于手写ajax代码一些建议
    $ R0 \( m# A" o# r1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
      x( v' b; W0 C( Z3 k1 d( l, {参考webservice json9 V' ^9 g& L* F4 L# @5 [6 b3 x

    & u3 V. f' n$ m& n8 r; @2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);4 H. G7 E$ D3 w) e& d+ T% Y' d7 R1 G
    # L: J+ m+ i5 c8 A6 V0 V/ z0 v1 j3 l
    3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded# f' c9 Z& Y0 ]7 E" w' o, I
    " R3 X, H1 {( t' A
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用& o7 _& m* y+ g' V

    , H- [) r) B8 k8 G  n! L9 k[backcolor=white !important][size=1em]JavaScript code3 x% u7 Q7 B1 T: |0 H# Z
    [color=white !important][size=1em]?

    7 `  e0 y6 g( o. n. I
    [size=1em]1
    " \8 Z; C2 I; b/ L
    [size=1em]2

    ; S+ X, R. J! ?. ~3 ~
    [size=1em]3
    4 D( k6 B6 Z7 @4 {1 o% X; O7 L
    [size=1em]4
    3 g/ {, ?3 H* U, Y
    [size=1em]5

    ; p  A; f. v+ g8 G* L+ t
    [size=1em]6
    6 j- Q8 v2 n+ E% D
    [size=1em]7

    6 m# z/ d% P6 V( e- M; F! i
    [size=1em]8
    ( }' R" A. c# q
    [size=1em]9
    6 u: L2 p% e7 d3 O
    [size=1em]10
    # ]  w( _. v% _8 H% n4 Q
    [size=1em]11
    9 f: o5 o% q. k6 G9 x. a/ k+ E  F8 l/ Y- \
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    ; D3 j" X" T" g[size=1em]      xhr.open('get', 'index.html', true);' W$ H0 m; S% D8 E# b: t; H# @" d- S
    [size=1em]      xhr.onreadystatechange = function () {" V+ h8 Q: V, F# l
    [size=1em]          if (4 == xhr.readyState) {( Z# E/ c% ]) V' f
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    # Y, |2 }( j2 x) _[size=1em]                  //=========正常返回后的处理代码3 R5 k4 u& u" a  i- }7 X1 x* ^
    [size=1em]              }, n8 V7 G2 n3 _8 x9 q# V! y
    [size=1em]              else alert('动态页出问题了~~');
    , \$ g( X% c6 W' n# n- c5 g) y& n4 d[size=1em]          }: f( |# ~* d0 y5 \) U
    [size=1em]      }
    - m# u! O# H$ }3 a[size=1em]      xhr.send(null);
    7 z3 C( J: m+ z
    - r7 F* @* Q( F7 T0 K
    5 k4 z/ a1 f+ _; ?- j

    + b# H: {! u# H8 z7 X
    ! s2 v2 }( w' i
    + m/ E5 U& u7 f4 Q3 d; r
      |8 Y4 h$ V7 h  `  |( t# l. y0 v* ~+ m: ?
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    ; W* l$ V2 q# B% N* r7 Z如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。) T, F8 k+ H" p6 o8 J. j7 b/ }
    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-12 05:11 , Processed in 0.398569 second(s), 54 queries .

    回顶部