QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1828|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。$ F, S; n* X1 F) v
    7 Z$ D- r% [1 x9 i" o
      下面是ajax对象的一些常用属性,事件和方法
    ' X; [- N( ^8 t8 D% C1 q  1)标准的ajax对象的属性有readyState,status,responseText,responseXML# I# K4 j& [; S
      |% w, @/ [4 {: d! y, [  _; ~
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    3 ^, z2 d3 y7 t/ a  o- n[backcolor=white !important][size=1em]Visual Basic code
    ' i$ Z/ ^; ]- h2 U
    [color=white !important][size=1em]?
    1 x+ @. N, p* f# f1 p3 \
    [size=1em]1

    * j/ I+ L/ ?9 ^) Y) j' y
    [size=1em]2
    / g. n' ~/ {- w/ `( k
    [size=1em]3
    + h+ N" v: A' m( b+ Y0 ]! @- f
    [size=1em]4

    % K$ N: {9 {0 }. i/ R
    [size=1em]5

    7 F. _. T2 c, r0 [4 G
    [size=1em]6
    6 C+ O2 K& A" E  d9 N. L
    [size=1em]7

    4 D6 Y1 p& g! z) a2 t; Z
    [size=1em]8
    1 Z$ u! {8 A! Y5 r5 f" h
    [size=1em]9
    + \' v. S3 S5 s- U6 l- s+ h! C
    [size=1em]10

    8 n3 l2 L2 X2 ?* p0 S
    [size=1em]11

    % v( f+ |$ C0 i: R1 d' L4 ?9 q
    [size=1em]12

    5 t* r" K' A- K' M' @3 q; l
    [size=1em]13

    ) z: V2 c# M/ l3 K: N' U
    [size=1em]14
    ! {2 o" \7 u3 D% V
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串3 @1 i$ C/ Q4 H
    [size=1em]     strreturn = ""1 T& x6 U6 T; v4 l$ l
    [size=1em]     for i = 1 to lenb(vin)
    # W5 j& X- a) x6 t[size=1em]     thischarcode = ascb(midb(vin,i,1))5 G7 V: |0 s9 F6 b. C
    [size=1em]     if thischarcode < &h80 then
    0 j; K# i  }5 Y[size=1em]        strreturn = strreturn & chr(thischarcode)
    " X/ `( Z- ~2 W[size=1em]     else  w8 S* y6 o7 }$ z" S- S
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))8 }8 D$ @% X2 S, {0 b% W
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    : h' ~! r5 c6 d; N0 X7 M% a9 n[size=1em]        i = i + 1
    2 [% S, g6 i8 t  S# c[size=1em]     end if
    ' w# a% Z" e3 q6 c/ k( b[size=1em]     next
      L% c7 J  o/ [; k" ]# L* G$ J: t) [[size=1em]     Bytes2BStr = strreturn
      i# V# B) t2 _- S+ }# x[size=1em]End Function
    4 F& ~; v- ]+ o6 H% Q6 v4 j
    7 R2 n, ~: a5 s9 I7 `3 R$ {, i6 U5 D  C
    8 L. b: W3 g* _8 ]2 F; F
    # O5 E" r! y! ^1 T
    ; a) G, i% a0 c7 g/ i
    9 l$ j& k5 `0 n1 K

    8 i0 |5 k. J+ @7 j. E8 J- ~  3)事件onreadystatechange,状态转换函数  D4 z" Y; c, D# t- `2 b4 t/ q, l
    9 D4 I  j0 V. |" m7 A# S4 y/ R0 T- A
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。' ~! T" p) ]+ N. l) a" J
    参考( V8 L, ?& o" ^9 L( W- n! z, T
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    : l4 q# W5 A  m4 w5 m* i  R9 F( O) @: R0 I, ]! o6 ^
      容易出现错误的问题* J" S5 ~: ?. z8 k% W/ t
    1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。  {1 D& D- t$ E  I6 d5 A7 d7 M
    ' b) k5 q1 s; U; i- w$ g
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写  f7 z( x0 \( ^7 u! o, e

    + d4 b, b  S+ M+ R& Z- s" X( c) j3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    * J/ I6 {, W4 ]# K; s4 w6 J; R
    # j; _8 V) G) H$ d1 D4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。+ M$ E( I! S& t8 {
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。; U4 X$ [+ i1 y1 j0 Z/ o& \7 s

    : B. r. C  @6 \4 J  对于手写ajax代码一些建议+ ~. w$ @: U- n  z* o8 T
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    - \1 `0 E8 t4 T4 A% \参考webservice json! t+ @- Z+ ?* y4 p; \" f* e% H

    - h9 [0 N! }# p2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);: V5 b( I3 I- X% r2 m4 X" j3 U) U

    % P3 Y! _) V3 _4 V$ W3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded/ s  n& f5 c! a" S

    * |. }( U# [$ m7 F9 W& W4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    # x; p1 h# W- O( a8 u* |7 X6 T9 B  R9 q8 z/ s
    [backcolor=white !important][size=1em]JavaScript code
    - d/ l3 i" Y, Q* z3 z; |
    [color=white !important][size=1em]?
    4 \, f7 T' r$ y. S& Z% E2 f3 y% k
    [size=1em]1
    9 d5 ?- j/ r  ~: K; ~: i& U: R1 u9 D
    [size=1em]2

    4 C* W9 v" g9 N. M3 w5 P
    [size=1em]3
    9 `% ]9 }) F4 P/ p* i. O" A
    [size=1em]4
    9 N& C4 b3 w* R. R% g2 q) s+ ~2 g
    [size=1em]5

    1 m: q/ u& v% Q0 E5 l3 p% H
    [size=1em]6
    " s7 W' ?& i. j1 {/ p3 y
    [size=1em]7
    , \/ ?6 A" ^' L" E1 T# N& s
    [size=1em]8

    ) {3 ^: M  T) b) c
    [size=1em]9
      b/ v6 ?( w+ u8 ?
    [size=1em]10

    2 y; C  z  Z7 i5 m7 M/ h& }: K, W
    [size=1em]11
    0 }. j$ D- F; u. ?
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");7 a1 X, _4 O1 @' m. }- m% {
    [size=1em]      xhr.open('get', 'index.html', true);
      |& u. t, A5 ]  ]# Q8 s7 p[size=1em]      xhr.onreadystatechange = function () {
    9 W  Y& q" V& p) P0 w' C+ T9 _[size=1em]          if (4 == xhr.readyState) {  T, L- v" W- n% Y+ ^8 K% B. R
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {! y; [2 M5 J. s
    [size=1em]                  //=========正常返回后的处理代码
    8 c' H+ l( ~2 M2 O[size=1em]              }  \' X0 W* L! t6 r! b6 w
    [size=1em]              else alert('动态页出问题了~~');7 P; |/ K% n$ f9 V+ }. q: c8 b
    [size=1em]          }
      Z# }) k( l% c; K# U& @3 @[size=1em]      }
    ( N+ ~2 T8 f* d" Q2 x[size=1em]      xhr.send(null);
    ! n5 Q) m; \; Q3 Q
    , w1 R* J. C2 ?" f
    , U3 r! Z/ a( L0 p; w
    ' z5 E8 Y+ b0 s  s/ |( M
    . }+ y, }' V2 T& A6 u8 I/ n+ y

    3 [% J! d  N* I% G1 i0 k+ g; Q4 G$ ?9 l
    : v% w1 J$ o; Q' C
    5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    6 b* l( l/ y  I- X! I7 v7 v如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    7 c$ V( t$ ]4 z) h( h% G+ N
    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 06:33 , Processed in 0.684999 second(s), 56 queries .

    回顶部