QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1930|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。  o( e' l) E' c2 s4 c
    , ]1 T# C0 T$ O4 |( }
      下面是ajax对象的一些常用属性,事件和方法6 i2 d/ f* p6 Z; F- y
      1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    " P& d' g" C( X' E* z1 o2 E
    + E0 J, z; ~  [; u- j) `  C, r4 s  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    & j. N. H* a% l9 ^2 }[backcolor=white !important][size=1em]Visual Basic code# {0 t2 z$ d2 L% b* n
    [color=white !important][size=1em]?

    + J" u8 X8 |9 e2 E! ~1 H1 X
    [size=1em]1
    * o& R$ b/ y" T! i* ]. |$ @' H8 [' _( w
    [size=1em]2
    , Q, Y  d, L. O9 u
    [size=1em]3
    2 p* t9 q% N. F3 Y
    [size=1em]4
    # ]' X/ x5 ]' j3 z2 y
    [size=1em]5

    . M6 {2 U0 z  Q4 t
    [size=1em]6

    7 X  }% m- k/ W
    [size=1em]7
    6 X2 F6 s/ q: e8 Z6 J& \. f
    [size=1em]8
    . t! s, A, T7 b) T/ X# I
    [size=1em]9

    1 h6 U& @% P9 x$ \2 X) n% d
    [size=1em]10

    ; |4 W7 F. p( m
    [size=1em]11

    + M9 F9 T8 T; t6 Q! Y
    [size=1em]12
    , m9 j. I5 q3 J8 h1 W1 L) x: E
    [size=1em]13

    $ n( q2 s! Z) s; A& D. T
    [size=1em]14
    - w1 }5 v) v% Q
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串$ p" d" {1 X1 P  K+ q
    [size=1em]     strreturn = ""
    ' ^. Q. b( o. Z/ r' u[size=1em]     for i = 1 to lenb(vin)* A7 X- I: L" K+ \/ L
    [size=1em]     thischarcode = ascb(midb(vin,i,1))
    0 Z! a5 y7 p; U0 `[size=1em]     if thischarcode < &h80 then
    ! Z3 r+ u- C8 d3 [6 f5 p[size=1em]        strreturn = strreturn & chr(thischarcode)
    , H5 q  E; V3 p0 @. K3 A[size=1em]     else! E+ N- L$ w$ k
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1)); y2 B8 K; P% G1 Q
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
    - W$ L7 L; l5 V# j* p$ t2 i5 p[size=1em]        i = i + 1* Z5 f7 r) G& o" j
    [size=1em]     end if
    : }7 K8 s, t) ][size=1em]     next4 L1 T2 f" e/ l8 d- @
    [size=1em]     Bytes2BStr = strreturn, I6 Q9 d9 X+ @+ r9 l
    [size=1em]End Function) N" V& b6 G# F% b
    & z2 t1 a) Z% N' n4 S% X
    ! A" }. e" q: {0 E

    ! n9 D2 O0 B) Q4 c) e, B  p- W. H9 ]7 q

    1 h' Z# h% ?1 p8 `. w/ h* G, H' m) w3 y
      3)事件onreadystatechange,状态转换函数# o% h' Z, s0 ]: m$ D  R. P3 }6 F

    2 k* `3 @4 \7 @1 U  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。2 g, m* K- c( ~6 \
    参考
    ) y( M; _! Y1 B1 {( B# N% Iajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容' w) C: Q, ~3 R2 K" g
    3 |* P4 l9 b) `4 U5 H9 V
      容易出现错误的问题
      W' X/ O0 ^2 }1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。6 K" T4 ~2 l2 V7 N
    2 T+ U! H  ~& A
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    / V' n0 M* o+ S4 b" B! B- n
      _# U6 G- {- F, j8 B) \3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    4 Z' c* ~) y$ y$ Z, N9 f+ V
    $ a, ]3 Y* Z, t7 r  r3 I8 t$ K4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。+ l0 z* n# P& f# s3 }! o
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    8 Y' ~: d! F0 a( ^' r( [
    - h# ^& ]. M" b& i  对于手写ajax代码一些建议
    + d; {& ?- g# Z6 Z1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。) X* A0 q, R0 D1 T
    参考webservice json
    2 ]8 B4 R2 E0 `4 Q& ^( X" p& S# E
    # k4 j& ]' |% N6 Z3 p1 u! s* o0 }2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);, J. E! x) N/ r7 ?. x

    7 R, ~% b  p0 K+ n7 C3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    ! [& Z. \9 V0 {0 W/ q. k+ q; a1 d
    ' C2 f) g; z) b# y4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用$ g- F9 o  u6 }" i' j" r
    9 b; I2 t' J# u; u; w
    [backcolor=white !important][size=1em]JavaScript code9 N8 Y2 S  m8 `. R- b! C) W
    [color=white !important][size=1em]?

    1 N) j9 y0 i1 E  X0 ]
    [size=1em]1
    2 c2 q1 n3 h( v' N/ b
    [size=1em]2
    0 H# K- t# ^8 f9 O6 C
    [size=1em]3

    # Y# G" C( m% H2 O* ~  I
    [size=1em]4
    & }2 P( A  [3 j5 |$ D# \3 \4 i
    [size=1em]5

    8 B! a. n( V. k! v3 }) p
    [size=1em]6

    - Y  G3 _+ `, p$ ^( F9 E" e# H
    [size=1em]7

    0 D+ `  q; Y5 x; I
    [size=1em]8

    ' g% a' G6 E! P/ z# H- K
    [size=1em]9

    5 z0 s6 R/ V. w: U$ A9 W5 V
    [size=1em]10

    3 ?+ C2 [8 z$ k0 B1 X7 U
    [size=1em]11
    & X) A  X+ }. {% N7 v) z0 F! |, K
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    1 y. b4 K8 `1 v: e6 Y6 ][size=1em]      xhr.open('get', 'index.html', true);3 G, @) n  Z. y1 O# S  Z2 d
    [size=1em]      xhr.onreadystatechange = function () {
    % W0 `" @# W+ u  f% g[size=1em]          if (4 == xhr.readyState) {: V! W' j5 k0 |3 g. d) A+ x, N! Q
    [size=1em]              if (200 == xhr.status || 0 == xhr.status) {2 _, D+ o, }2 A$ [
    [size=1em]                  //=========正常返回后的处理代码
    ) W  J- z3 e, S+ m+ q- w% X[size=1em]              }* P/ c* m+ e) q* t+ l& T; C
    [size=1em]              else alert('动态页出问题了~~');% f! e- R6 q/ F$ d
    [size=1em]          }3 {% u9 W* H% c1 B6 K
    [size=1em]      }
    - a1 S+ c' u0 _% ~3 E! M  G[size=1em]      xhr.send(null);
    * ^8 H% I, ~8 T- Y# \! A# Z/ ^! t8 @4 p# F+ b$ y

      R& @" M/ d4 R8 a4 \. i- E# R1 N1 M; ?1 l6 K' V! C
    # @" Z. k. g6 b
    . l2 \% Z* a- b" q6 }, Y

    & K9 o& `& @6 {0 \; M2 H
    3 l. I  h2 @" o) [5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    & w7 U* Q0 n! ^. V! j3 z如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。  E8 F' M; \2 q7 Y& _4 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-9-1 03:22 , Processed in 1.084491 second(s), 54 queries .

    回顶部