QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1884|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
    - }6 b* X9 y4 v8 ^/ [0 `- W) T: K9 m  ]3 g. o! H0 j
      下面是ajax对象的一些常用属性,事件和方法1 o- e3 Y# ~! v7 z
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    " Q$ H5 W( v% V/ R; _3 u- ~
    " L" X  K! z9 ?) i5 O/ K) B6 D  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    ! g* N" Z4 F1 F6 G8 S3 B2 J5 g3 o[backcolor=white !important][size=1em]Visual Basic code
    0 N- l+ V+ z# T; l  E& r( s
    [color=white !important][size=1em]?
    " \$ v' }) l7 U1 X! L* M2 j/ a2 q4 l
    [size=1em]1
    / z: [( _. `9 m: H
    [size=1em]2
    % x% f, A3 G/ q/ F' p
    [size=1em]3

    0 q7 }  n. f9 C: z- v% k
    [size=1em]4
    : ~4 j' G8 L7 c; u
    [size=1em]5

    ) U+ {4 L/ a; Y5 }! \% W  j
    [size=1em]6
    ( M- v! g0 r! S' @
    [size=1em]7

    8 V1 c& W" h0 y( I: d
    [size=1em]8

    / E7 P: o- l% o9 N2 q
    [size=1em]9

    ' ^8 B0 r. x5 Z  G# s
    [size=1em]10
    2 m4 P# e9 }+ x/ D4 {- P: J- `7 K0 {
    [size=1em]11
    # ^( R" O( a5 T
    [size=1em]12

    ' N' `- u$ @' G! l1 j- {
    [size=1em]13
    : i( }  U1 I( S# d9 V0 H
    [size=1em]14

    : e" B( ?1 b! v1 t# R
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    3 w  d0 I3 n6 b" v# N* @[size=1em]     strreturn = ""/ A5 @* |" o$ @; I. s
    [size=1em]     for i = 1 to lenb(vin)
    ) A5 T# D& h0 t: G1 G8 ~1 ?[size=1em]     thischarcode = ascb(midb(vin,i,1))  _5 \4 F: _# }; N
    [size=1em]     if thischarcode < &h80 then
    % ]+ R  N/ j  |" X[size=1em]        strreturn = strreturn & chr(thischarcode)
    5 W$ s$ d8 ]6 f9 a  z; d1 T[size=1em]     else
    / z% O" H4 y4 X% c- ~) l[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))
    # y2 z! D/ z0 z5 J" c5 A: u. t* ^/ e[size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    9 p5 j7 N3 z& e8 B% n' L2 k[size=1em]        i = i + 1& b7 y" x% T& M9 I
    [size=1em]     end if
    7 L% c: i. k, [/ Y5 ?[size=1em]     next8 }. ^( `3 [% [
    [size=1em]     Bytes2BStr = strreturn. d( q6 |' I8 R3 W. e$ U0 y9 A
    [size=1em]End Function
    6 W0 P5 Z: W* _% y; K$ P. c& O1 N/ U& F1 a8 L* N9 [0 H

    # r6 Q  o2 B! g
    $ H( p" V' q5 d: U1 m  |" y: U2 M$ H; K: M) x# P' p

    : F4 _6 H& f: O- f+ d( ~4 |7 {& {- K- s2 {' l  q$ j; p
      3)事件onreadystatechange,状态转换函数
    3 V6 p/ J  _' v/ }
    / D  J. c$ w9 u' m; V# |  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。. o* R0 v9 L# U/ b4 _5 Y  e
    参考- P3 \" z, g& w8 Q
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容; B1 p6 P  H( E, t4 X

    . X7 C. K/ c3 T: r9 B2 s# Q1 N  容易出现错误的问题! i& ^3 p* Q$ w
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。) y' f  Q3 C. c9 {8 _
    0 C4 Z$ [: }( T# b# L4 ^5 E
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    ( U. I$ \( E* U! y# N
    ; P! R/ F; C/ b0 p! D/ x3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    * v5 l) V3 d8 O( u: t2 }) Y  o4 L. z6 R5 g, f  j# z
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。
    - l8 ~" S: o+ C/ u/ }  特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    % G( y4 M$ B4 x7 k$ N5 I' X! S4 c$ l. C6 K3 S
      对于手写ajax代码一些建议! ?% f$ h) H  ~& g! R
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。  ?+ w/ E: U5 O/ H  m
    参考webservice json, ^6 R) u9 D2 n5 F, J# \# s
    3 I9 I9 `4 x# `# e
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);
    ( M3 B3 A+ j' @& r
    6 R' o  w, ]5 u+ }3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded6 u7 t$ I: S/ Y

    % I  I/ n8 C/ D. {4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用6 B) U5 L7 Q4 h$ S

    0 i2 a7 n* B. T8 A; @. `: v, E[backcolor=white !important][size=1em]JavaScript code0 @: X5 O3 t% q( F% E
    [color=white !important][size=1em]?
    4 B! ~3 x! K) Y" V4 b! A2 D
    [size=1em]1

    7 a# a% L0 e/ W1 j" `
    [size=1em]2
    % o5 y1 v7 P; {2 Z8 y
    [size=1em]3
    . k. ^# S, d5 v( o7 [
    [size=1em]4

    5 }4 s* G0 l! H- l, n
    [size=1em]5

    , R; f6 m% _$ o# ?8 i
    [size=1em]6
    * d  {6 K/ T" e
    [size=1em]7

    ' s8 q; z: _6 J) {+ S( w9 y
    [size=1em]8
    ( o8 C/ l& @$ i
    [size=1em]9
    2 J# z) g) |/ p0 L
    [size=1em]10

    2 [) Q# `2 _" P, |8 U: E
    [size=1em]11
    $ U" A# N+ ]0 Z  F! T& o0 k7 m
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");" D3 \! O0 P4 Q" \- h
    [size=1em]      xhr.open('get', 'index.html', true);
    & ~1 U* `1 }/ F/ @[size=1em]      xhr.onreadystatechange = function () {
    - y8 j7 V9 w1 e7 x  _[size=1em]          if (4 == xhr.readyState) {1 p) w: P$ c. X# a- h
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    3 Z% C1 }9 L" n5 L1 |  ]3 X[size=1em]                  //=========正常返回后的处理代码8 J/ E& V0 ?; ~' {
    [size=1em]              }
      t. V9 Q5 B- y( ]. N/ E( Y7 n5 |[size=1em]              else alert('动态页出问题了~~');+ \7 a. d; ^8 {# X( A/ C* o1 o
    [size=1em]          }; Q: ?9 }" X- h
    [size=1em]      }0 l7 l0 F. R) C  U5 P. N
    [size=1em]      xhr.send(null);1 H* B2 r7 ?" S" z* O$ [
    4 w4 y! t* @8 @1 V7 A

    # V# p5 y3 [1 G3 {4 q! d% S% b6 ~' K! T6 z, O7 W
    2 I. E. c9 m* \/ P
    1 U' l: A* U1 h0 R( ?

    ) H- b5 z! p6 ^- F! i" ~5 `& N" y% a
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。' y7 b+ g8 f8 C" K4 R; m+ R
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。  o( M" U' E$ K
    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-13 15:42 , Processed in 0.534452 second(s), 54 queries .

    回顶部