QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1836|回复: 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版块好多问题都是属性,方法,事件大小写不区分,导致程序运行出问题,或者在不同浏览器下效果不出来或者出错。
    - s1 I1 V( ]2 @2 a3 H$ w4 C3 h' [$ k1 V! Q
      下面是ajax对象的一些常用属性,事件和方法
    ( m  P  ~9 J. p- L  1)标准的ajax对象的属性有readyState,status,responseText,responseXML& V+ ?+ e0 g" E8 Q

    % s; L' g$ N- l! R1 W  2)非标准ajax对象属性,针对IE浏览器的,有responseBody,2进制数据流。如果不考虑浏览器兼容,这个属性+VBScript能很好的解决乱码问题。  ( I& R: V& w5 R6 n9 X
    [backcolor=white !important][size=1em]Visual Basic code
    " m. U- A* `7 Q! m/ m
    [color=white !important][size=1em]?

    " n1 a+ D: u  g  G6 |& I
    [size=1em]1

    # [# R* W8 d' H
    [size=1em]2

    / \2 N, {& u, X8 K
    [size=1em]3

    ( X3 [" w6 D3 ]& @
    [size=1em]4

      W0 e5 U" ]; D7 x5 L( W$ r
    [size=1em]5
    & k, e* @! K6 _5 H0 C
    [size=1em]6
      p) h- X: @+ n& n$ D
    [size=1em]7
    . o) N( {, k" j  U0 L/ h+ B
    [size=1em]8
    + _; \3 F+ x5 G5 W' U$ z9 Q- f
    [size=1em]9
    / V& ~  _7 [2 |, l4 A# |
    [size=1em]10

    . i8 `; ]: J7 f: }% R
    [size=1em]11

    ! F$ M/ F" y+ L. U- |
    [size=1em]12
    5 t  x: i9 e8 e  A* s
    [size=1em]13

    1 d- m, R% W# H5 h9 Y, z0 G
    [size=1em]14
    3 C7 @. a+ T( r- i  U
    [size=1em][size=1em]Function Bytes2BStr(vin)'二进制转字串  V0 Y7 m# E( g; v7 M# N* J6 s
    [size=1em]     strreturn = """ P1 ?4 q9 |8 c- w) z5 w8 E1 D
    [size=1em]     for i = 1 to lenb(vin)
    % j7 C5 P& S" {[size=1em]     thischarcode = ascb(midb(vin,i,1))1 r5 A8 \! z% t$ ~% E$ P$ P* ]
    [size=1em]     if thischarcode < &h80 then
    : x: g8 y+ y; k" T: T$ ~$ o[size=1em]        strreturn = strreturn & chr(thischarcode)/ x) N4 m/ Z9 c9 Q% f
    [size=1em]     else
    ) G! V# @0 e, L( T% B" G[size=1em]        nextcharcode = ascb(midb(vin,i+1,1))9 t. V/ M4 u  F  ~' n. j
    [size=1em]        strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))$ \! B" j3 z; O. f  X
    [size=1em]        i = i + 1
    3 c4 f% t: J" y[size=1em]     end if4 s/ r8 V+ p; Q  B" y6 G
    [size=1em]     next
    9 {( d) {( @& V[size=1em]     Bytes2BStr = strreturn
    2 S2 C0 ^6 K2 O7 C[size=1em]End Function' Z. R2 o3 |0 u( Z

    ' R+ T3 ~; @7 u& [' U, F, D
    + s, J7 Y; R2 \& E0 {. m7 _$ |% G

    : f; m0 I& z/ N/ s' Z, d# K. t
    * m3 w: i$ A+ R5 e4 p9 C* e6 R) Y; t/ a7 G

    + L, M7 V! v* q, s4 W  3)事件onreadystatechange,状态转换函数* {0 G1 O8 n0 s! |1 w3 @

    0 _7 Z' V1 B8 |( T% m) x2 d" Z  4)方法有setRequestHeader,open,send,用于设置响应头的,当指定提交方法为POST的时候,需要设置content-type为application/x-www-form-urlencoded,如果未设置这个响应头,请求的动态页无法使用键值对的形式获取到值,不过可以从二进制流中生成提交的数据。7 S) q1 Z. G- O) U6 {
    参考
    2 s& }1 i8 r8 R. \( s5 d: A5 Aajax指定为post但是未设置content-type或未指定键时时如何获取提交的内容. m: V9 K' _" v* c' d
    ' E" {, g: J7 J: D
      容易出现错误的问题
    - p0 {0 g+ i! y4 o# U1)对于使用XMLHttpRequest创建的对象,包括IE7+,属性是严格区分大小写的,一定要注意大小写的问题,要不不区分大小,属性值就是 undefined。如readyState写成readystate,responseText写成responsetext。
    / N3 u3 h2 h8 |. k* \, G) V4 a6 ^$ b) E# B; t8 V8 y$ s
    2)对于IE浏览器,如果是先判断activexobject,那么会执行activexobject创建xhr对象,使用acx创建的xhr对象,属性,事件,方法都不区分大小写
    4 n% |3 A' k! `1 @- T# S, \( `* G
    3)使用XMLHttpRequest创建时,onreadystatechange一定全部为小写,要不相当于给xhr对象赋值一个自定义属性,而不是实际的状态转换函数。这样永远都不执行回调。对于IE使用activexobject创建的xhr对象,不区分大小写
    + p% F* z' U! y5 T+ z0 C
    2 ~) ]! q2 Q3 f/ k$ u/ a4)同2,3点,XMLHttpRequest创建时,调用方法一定要区分大小写,要不会出错,提示找不到方法。IE使用activexobject创建不会区分大小写。, h- B+ {) d0 {9 J
      特别强调的是,一定要调用open方法后,才能执行setRequestHeader方法,要不会出错。+ S, G, u7 F3 n8 S1 }* k+ n1 y7 ^" @/ f

    ' Y# a8 _0 \, \9 `/ ^+ Y  对于手写ajax代码一些建议
    ' g' @# W( ~, h, g7 }( ~1)为get提交时,不需要设置content-type了,除非请求的是一些需要检查content-type生成一些对应的数据格式的文件。如 asp.net的webservice会检查content-type,如果指定content-type为application/json,会生成对应的json格式的字符串。2 B% i$ d5 \# ^9 m+ h
    参考webservice json7 V6 E' M- `5 D
    : S% S' u" K: q
    2)为get提交时,如果没有数据,调用send方法时最好添加一个null作为参数。xhr.send(null);& q* f+ ^! E) Z. w

    1 d4 q) e0 h  Z4 d" s6 F; y' @3)为post提交时,一定不要忘记在调用open方法后,再调用setRequestHeader方法设置content-type为application/x-www-form-urlencoded
    6 C% [5 u8 h2 L3 b7 T# J$ m7 M, A5 S8 \" d/ H/ T5 l
    4) 在使用responseText,responseXML和responseBody【IE only】,status属性时,需要在readyState==4,status状态==200【在线测试】或者status状态==0【本地测试】时再使用
    " C6 i. c& |9 l" c# F% d0 M, T! @4 L
    [backcolor=white !important][size=1em]JavaScript code8 F9 J. n5 J1 B0 i$ o
    [color=white !important][size=1em]?

    6 L" ~) Y9 Z% f3 h, W& ^
    [size=1em]1

    / f+ q! x5 \! p+ }6 l8 I! Y
    [size=1em]2
    ! r; q) [2 E, t; ?9 i1 V
    [size=1em]3

    8 v4 s4 [; y% X  `) `4 W- C; G
    [size=1em]4

    : z; V$ S) [+ n& _- ?: Y0 z
    [size=1em]5

    ) B1 `: t9 W* P% X8 Y" y
    [size=1em]6

    # ?2 {4 f% N- J
    [size=1em]7
    2 P, j6 k+ W+ R- I/ n) S' q$ W3 N
    [size=1em]8
    2 U' e0 j! h6 c& ]9 E; O; I( b+ s9 J
    [size=1em]9
    ( E4 [& G) [# v
    [size=1em]10

    & ]% F8 E, J. H2 q1 x& X
    [size=1em]11
    & n/ A  ^3 j# u1 E) p$ h. O
    [size=1em][size=1em]      var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("microsft.xmlhttp");2 R; E2 g- @# F+ g
    [size=1em]      xhr.open('get', 'index.html', true);
    4 v+ H* Z( G8 b: o+ _[size=1em]      xhr.onreadystatechange = function () {* N% R: Z  O* {8 e3 O. n  W/ m
    [size=1em]          if (4 == xhr.readyState) {
    9 I8 x( Z0 ]  _5 C0 b0 b[size=1em]              if (200 == xhr.status || 0 == xhr.status) {
    0 |9 p% Z2 C1 S2 q[size=1em]                  //=========正常返回后的处理代码
    7 k3 Z8 M. k6 G[size=1em]              }. O  r, Q+ A. [# `
    [size=1em]              else alert('动态页出问题了~~');: v' q  x) s5 u! R+ h
    [size=1em]          }8 F* ]+ b2 {2 G+ B
    [size=1em]      }! r7 ]4 d. t( ]; e3 [* u: q
    [size=1em]      xhr.send(null);6 R9 J4 x  ]+ D: H

    1 c: s# D9 l2 m4 M8 {6 S& c9 I6 |; Y9 u

    ( }( G  G2 C2 m2 g) N6 Q6 y) \8 o8 h0 n' n8 y: T3 O* L1 o, D

    / {( O( X, M1 b0 c# Z
    1 Y0 `7 R$ N6 f7 I* F! I" j. M4 ]) y8 d) J6 [/ a$ O8 g; `% h) I

    # v! @6 |2 K% o9 Y( y( P) S! O) Z) a5)如果为异步执行时,需要添加状态转换函数,然后在readyState位4时使用responseText或者responseXML属性。$ r4 q0 U% W2 B) c, D9 r- I! j. c
    如果为同步执行时,可以在send完后,直接使用responseText或者responseXML属性,不需要添加onreadystatechange状态转换函数了。不过为同步时如果网速慢容易造成浏览器假死,用户体验不好。
    ! t, d4 B# t1 q" P/ N8 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-4-17 02:02 , Processed in 0.431365 second(s), 54 queries .

    回顶部