QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1996|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。: O8 m3 W$ B6 X. T, a3 Q

    ; x) E& o. k- m$ g  下面是ajax对象的一些常用属性,事件和方法
    3 [8 W" z0 u! D, C) b  1)标准的ajax对象的属性有readyState,status,responseText,responseXML. _2 C( Q" j  n& u4 \
    % i2 D( a% g$ M3 G/ _& y
      2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  
    & ~' b8 W/ j+ P; [6 j0 N[backcolor=white !important][size=1em]Visual Basic code8 C4 R$ }0 l. z  c# K
    [color=white !important][size=1em]?
    ( k$ T/ ^& u% U* y8 X/ c
    [size=1em]1
    : l8 p3 [' X7 L& V
    [size=1em]2
    8 A* C, F2 ]& }6 J7 q% }0 y5 P- W) Y
    [size=1em]3

    * [) V5 }0 ?' E; J) q
    [size=1em]4
    5 w4 a8 M, R1 b; l" E/ \
    [size=1em]5

    5 `/ \# N. l6 K( g
    [size=1em]6
    ( _, e* m# f5 {4 \8 C5 I9 U
    [size=1em]7

    0 i2 T4 _& G! Z& ?+ M1 l
    [size=1em]8
    . ~* B/ V( ]7 x/ H; q0 L0 ]7 }* e
    [size=1em]9

    ) z- O. P. `* C8 x$ U) d) ~
    [size=1em]10
    * H) X( D1 G! v7 s
    [size=1em]11

    0 C4 s, L: w* p. ^/ H
    [size=1em]12

      b3 t6 E0 s2 ~. }
    [size=1em]13

    , b3 f3 F0 _0 |
    [size=1em]14
    & ]" h$ L- e/ K; g& n: y4 z* \* t
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串6 D8 E0 D1 j5 a" x( T' K. J* x
    [size=1em]     strreturn = ""3 J4 J0 O1 R  O& k- z1 C% v* |
    [size=1em]     for i = 1 to lenb(vin)
    4 e3 ?0 w/ W& O& R. @  D6 R) ]" u[size=1em]     thischarcode = ascb(midb(vin,i,1))1 t. U, J& v1 r+ k5 G( q1 Q
    [size=1em]     if thischarcode < &h80 then7 [% @+ L) P; a9 z, H, |* I7 M# c7 A
    [size=1em]        strreturn = strreturn & chr(thischarcode)
    / c' z. x5 d& p0 H) F[size=1em]     else+ D: }" l* X. a+ j1 M
    [size=1em]        nextcharcode = ascb(midb(vin,i+1,1))+ y& _5 `' `8 i8 e7 y- O
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))' R$ @2 o" M9 A: J
    [size=1em]        i = i + 1
    ; T5 V* A8 f* p2 b# p# c) u[size=1em]     end if
    / `% B9 J  N1 B& s) q4 h. _" {; h; U- k[size=1em]     next
    7 h/ x4 c' v6 V3 a. @[size=1em]     Bytes2BStr = strreturn9 @8 _$ n. B2 h9 d8 L* \
    [size=1em]End Function. H' Y4 Q7 n; e; ~) @* y$ R6 f

    % b. @& }9 m2 B, U

    . c% `8 F& _) r9 C* F$ F, H3 Q
    2 o* k$ c* z$ ^. a' S
    + z6 l7 q/ N" z! U  h9 T- r7 Q/ Y( N; Z! z8 g; B( R

    8 u9 S7 U7 r+ Z! ]& f) B, V  3)事件onreadystatechange,状态转换函数
    " P' Q" Q! y. W( C
    % L4 R. ^2 K3 X+ o5 ]5 {/ H- d  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。: ~$ c7 a* a2 t4 S, M  |4 l1 t
    参考
    7 o) m- m) O0 u$ a# z. p. Sajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容
    - r# f' d: h+ E; G6 I. t" S
    ' T" j' ~6 ]5 U2 z' d  \  容易出现错误的问题
    ) D9 ]7 @$ N/ R- F. V/ Z" F1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。4 w1 _# ~* W; n
    5 E: V$ L0 p' C/ X3 ?; T
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写  H- D( s% j( @; {  H+ z

    . Q' V! C6 n; o9 a7 [% c: r3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    4 Y2 |8 R) w/ N, v$ P' n( R$ v: g9 K2 x. M
    4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。3 R+ v/ J7 }3 E3 [$ d! f
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。
    : J0 y2 m2 T$ V6 ]) u& R* o* @1 J! q
    3 w+ w+ G, \, B: Z+ ?% B, a4 Z$ b  对于手写ajax代码一些建议4 d) U8 T; W9 ?
    1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。
    8 W4 d' H9 N. I# ]$ X- O8 o: _参考webservice json
    : E0 U1 d; w) i/ V+ ~' L# d9 l" L
    / c/ N$ [1 [. N6 |2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);0 J* Y# k8 d' O7 |6 X

    , y" O* ~8 C1 C4 T3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    0 E- L1 x* M" e  B% |
    8 ^" S1 e# S$ I% u- B; Q4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用& y# j$ A6 f! [

    2 H. \4 v8 T& F3 O1 d[backcolor=white !important][size=1em]JavaScript code
    5 e1 l* P" }  |* P" s
    [color=white !important][size=1em]?

    + d" X4 H! T4 u
    [size=1em]1
    ' ~. S- l1 p2 I) t* J+ N
    [size=1em]2

    ! [# r) c; g' Q* ~
    [size=1em]3
    8 g: e8 M7 V5 C. L; o! y
    [size=1em]4
    5 u' i/ b2 S2 I$ V$ m  Y2 H
    [size=1em]5

    ( e- [) z! G: G' M
    [size=1em]6
    2 Q9 r* u0 p6 u3 z
    [size=1em]7

    ! M$ G+ _3 k+ N7 d
    [size=1em]8
    5 `  L% M2 i: W* K1 b
    [size=1em]9

    $ Z/ f  s) b$ s$ e+ `
    [size=1em]10
    ! w3 W+ n& y0 g/ C2 D9 Y
    [size=1em]11
    # p; G( g% G$ x  d/ w
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");
    0 Y2 O2 R4 j+ q" O% U1 [[size=1em]      xhr.open('get', 'index.html', true);" G; L9 r; J+ }* ^( ^5 Z
    [size=1em]      xhr.onreadystatechange = function () {# R; `& H- g+ O. c
    [size=1em]          if (4 == xhr.readyState) {
    3 o" k' ^0 B5 ~& w[size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    0 _* j2 T  x4 P( O' m) c2 M[size=1em]                  //=========正常返回后的处理代码: A* a, G" X- R
    [size=1em]              }9 Z" H6 k/ D! A! F' Q$ {
    [size=1em]              else alert('动态页出问题了~~');4 v- R; \- H4 j/ A
    [size=1em]          }
    % L# O9 G3 x4 K& N9 m[size=1em]      }
    ' U2 N7 \- m- i4 V: v% M- `[size=1em]      xhr.send(null);  n9 b; E6 F0 Y5 x/ ^5 R
    $ U) x% _. M" a' U) f

    : [% h) F% V" p' K7 E
    ( i2 k, T, |0 R1 ~. E* v2 p" Z' E# P- K* k: x/ J+ m( x& }
    % ?- K) Q5 {/ H) x: _

    % A# q7 T$ F- F
    5 T0 ]  g. K, w5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。  ?, U& p; Y" A$ t5 z( i2 g: i
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    $ Y- F. J+ w# v" W
    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-10-8 07:38 , Processed in 0.774807 second(s), 52 queries .

    回顶部