QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1827|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
    . t) e) B' w$ u; J- W2 h9 W. d; V" z* t
      下面是ajax对象的一些常用属性,事件和方法
    ! G' {+ d$ E5 b  1)标准的ajax对象的属性有readyState,status,responseText,responseXML
    2 k2 H. V# Z1 K4 n
    - |0 Y! h# @& ~# M! X' V  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    5 v* V, s/ F7 w9 i* T' h# K- W[backcolor=white !important][size=1em]Visual Basic code7 ]9 o& ~7 r8 V; N' R5 {" U( Q
    [color=white !important][size=1em]?
    / i9 K. q, B# k" @$ y. f9 c* G
    [size=1em]1
    % f) A" p/ u( W' ]4 o) |+ s2 u
    [size=1em]2

    8 S  x# @6 @- N, `& c+ |
    [size=1em]3
    ' b+ ^, a6 w  F3 E# A( \* b9 h
    [size=1em]4
    / @% J6 H0 C0 k& R* u
    [size=1em]5

    4 _. B! k5 B) o3 {2 k; l# O
    [size=1em]6
    " t! a1 L* j5 _5 }$ g5 j' r0 w: ~
    [size=1em]7

    3 A6 J! @( R6 E  z) y3 ^
    [size=1em]8
    / ]8 @% M2 e' O8 f) J1 J& _! z+ O
    [size=1em]9
    + Y( _7 Q3 s5 e- D+ z6 G
    [size=1em]10
    " f" g+ y2 |* U; A' u5 A" C
    [size=1em]11
    & V9 @9 C4 y! b+ e, w0 Y6 A- }
    [size=1em]12

    6 M9 I4 K, }" f0 G8 {& ~/ f% U( P
    [size=1em]13

    6 _% D' t  o+ P  H! r" E! M) o0 U
    [size=1em]14
    1 b( \# h0 ^/ \6 w: z8 |  a
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串
    5 ^: ?, H* ~7 e[size=1em]     strreturn = ""% e; u$ x& C6 V+ ?: M
    [size=1em]     for i = 1 to lenb(vin)
    8 X+ S8 F6 X  P: Q6 f+ t0 J[size=1em]     thischarcode = ascb(midb(vin,i,1))
    8 ^% v$ p) V: a  [1 u4 k8 \: e[size=1em]     if thischarcode < &h80 then
    " G5 I) S$ p1 Q$ f8 V  I[size=1em]        strreturn = strreturn & chr(thischarcode)* K9 C6 O/ ^7 b, p7 O( M, Q: D- s
    [size=1em]     else
    - u8 K* ^0 M: N7 l  Q: H$ L[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))! R6 m  N% O6 @- T& R5 v7 C
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))+ {! J0 H/ \0 \2 s- J
    [size=1em]        i = i + 1
    8 [8 @# e/ s! @- A[size=1em]     end if$ u- ~5 O, ?0 i2 b4 j1 \6 C
    [size=1em]     next
    / {9 |9 a, o4 \( V$ z[size=1em]     Bytes2BStr = strreturn0 _2 n9 X  Z1 z4 t2 T( k
    [size=1em]End Function
    # E! l( ~6 z: t' e9 h8 p9 |- Y0 H# T3 J0 p; f& a

    4 ]  h- E0 q6 I
    ) y* Q* K$ Y  |+ \
    & l0 x% O% X5 C2 {( L
    * V: k% m0 G0 l/ E- h
    ) B  \; q0 q% g/ [% E" P" ]  3)事件onreadystatechange,状态转换函数
    ) }2 g: L9 \6 C1 S# C# {3 a2 h# x% ?8 G$ t
      4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。
    : t* w6 _7 y5 I; P" t4 m+ Q6 e8 Z参考/ ?- h( l( c4 V& T
    ajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容, g/ E# s% d/ ]) I* \2 Y
    3 k5 j9 Z6 T; e
      容易出现错误的问题
      u, c# T3 H7 ~* k* |  a4 A5 k% [3 i1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。) D9 k3 m1 Z* f
    # w1 O  ?* _: N9 t! z5 }  T
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    ) M0 ]9 ]5 h: s7 h# K5 P" w- J+ D
    # g0 F0 `6 r1 r3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写9 a3 H8 W/ s# _5 _; }1 q1 y

    9 ~. S$ z0 d7 P9 {) O" D4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。- K  {# q- P5 x: ~; ~. ~# b
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    6 B6 u% x! a4 c
    $ g' m: d+ q3 J! z  对于手写ajax代码一些建议; w' [2 s: ]0 }8 K
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    3 f. E. f. L! c; b2 x- I) S) k参考webservice json- d$ h$ v% t# n+ \  d8 D, K2 }2 b
    % a! ~5 A0 W$ N) l
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);7 L* K: @7 i7 b6 N4 ]% z; k

      l1 y8 U% Y* b: b7 z% [3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    ( O4 G- y2 d( }+ p2 H7 H' y
    & x4 @- c8 i$ z. P0 T1 ~( }4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    ( r& }% q1 }: u/ B1 i6 ~
      d6 f; c% @5 y: X  b- Q6 H* L[backcolor=white !important][size=1em]JavaScript code
    . V7 `6 ^8 d/ M" V, K4 k* k: v2 V
    [color=white !important][size=1em]?
    ) G6 y0 p1 D. H& {% z
    [size=1em]1

    , }7 u$ ^/ k  O! g# g- g
    [size=1em]2

    ; m6 @  ?8 |4 V  N
    [size=1em]3

    - o  ]8 O' \4 i; d& m
    [size=1em]4
      r, y* U6 M4 D! E" r
    [size=1em]5
    5 `* p7 t& }6 J
    [size=1em]6
    ( E7 e. ^! D% d4 M! F
    [size=1em]7
    : B" }0 v! O  P6 E1 F- _
    [size=1em]8
    . O6 p: N& `" \" g  V$ X$ X4 y
    [size=1em]9

    - |; x! z! G5 \
    [size=1em]10
    " z% R; l# O' n6 A2 F/ k$ {7 j
    [size=1em]11
    " J- `" y9 j7 J
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    ( e: v7 t: \& R8 O, Q; Q. C# N[size=1em]      xhr.open('get', 'index.html', true);
    ( D0 x( y3 P# P1 t9 z[size=1em]      xhr.onreadystatechange = function () {
    . a& r; V; ]9 f8 q[size=1em]          if (4 == xhr.readyState) {
    + Z$ C6 _: i# r( [6 b[size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    # |; F; K; H( `, b[size=1em]                  //=========正常返回后的处理代码
      P/ c3 w4 d/ i/ m: K$ \1 c[size=1em]              }
    : J1 i6 X2 I. s' `% }) z# p[size=1em]              else alert('动态页出问题了~~');
    3 r: O6 R- j7 Y9 \1 Q[size=1em]          }
    + S7 C$ {5 Q9 S: Q[size=1em]      }
    . |) r  U% S; L5 |4 F[size=1em]      xhr.send(null);
    6 y4 C2 [$ N, ?
    0 u8 K/ E6 F6 w4 R9 e
    * F- v5 j. A8 R* C/ X9 i

    , o4 _+ G  J* }6 f7 }0 d0 ?
    " j1 r  p- d$ l( _+ m! l' W$ y$ ?# d- C

    5 T7 {" d8 ]6 o1 M9 Y
    9 c& s& ?3 ]) t5 J3 ~1 c3 G5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。
    3 ~& Q0 x4 O, w2 N. d4 V6 }如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    " f' T1 Q0 q6 ^& e7 S) P% j  S* g
    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 05:26 , Processed in 0.322680 second(s), 52 queries .

    回顶部