美文网首页
Chapter 21. ajax与comet

Chapter 21. ajax与comet

作者: weiee | 来源:发表于2018-08-14 22:06 被阅读0次

    Ajax: 异步 + JavaScript + XML,核心技术是XMLHttpRequest对象(XHR),能够以异步方式从服务器获取信息(使用XHR对象获取数据)。
    XHR:

    1. open(方法,URL,是否异步)
    2. send(请求主体/null) 注意:无请求主体必须传null
      同步请求会在浏览器响应后再执行JS代码。响应数据会自动填充XHR对象属性:
    3. responseText:响应主体(无论内容类型是什么,响应主体都会保存到responseText中);
    4. responseXML:若响应内容类型为”text/xml”或”application/xml”,则保存包含响应数据的XML DOM文档(对于非XML数据,responseXML值为null);
    5. status:响应的 HTTP状态;
    6. statusText:HTTP状态的说明;
    7. readyState(异步XHR对象属性):
      (0) open (1) send (2) 部分响应数据 (3) 全部响应数据 (4)
      readyState属性值每次变化都会触发readystatechange事件。通常只会使用4阶段。需要再调用open之前指定onreadystatechange事件处理程序保障跨浏览器兼容。
      HTTP头部:
    8. xhr使用setRequestHeader(头部字段名,头部字段值)方法设置自定义请求头部,必须在调用open()后、send()前使用。
    9. getResponseHeader(头部字段名), getAllResponseHeaders()无自定义信息下返回多行文本
      getAllResponseHeaders()有自定义信息情况下返回什么?

    GET请求:注意查询字符串格式问题,需要使用encodeURIComponent()进行编码
    POST请求:send(请求主体)传入数据,可传入XML DOM文档,文档进过序列化后作为请求主体提交到服务器。服务器对POST请求和Web表单请求处理不相同,若用xhr模拟表单,先添加头部Content-Type: application/x-www-form-urlencoded,再将表单数据进行序列化(使用serialize())后通过xhr发送到服务器。

    1. 什么是js中的序列化?为什么需要序列化?怎么对数据进行序列化?
    2. 什么是表单?怎么用xhr模拟表单?

    FormData:XMLHttpRequest 2级定义了FormData数据类型,用于序列化表单数据(new FromData(form)与serialize(form)等效),创建与表单格式相同的数据(用于xhr传输)。优点:不必显示地在xhr对象设置请求头部。
    timeout属性:请求终止会调用ontimeout事件处理程序,但readyState可能已变为4(事件队列处理ontimeout程序时,readyState已经改变),则仍然会调用onreadystatechange事件处理程序,而超时终止请求后访问status会导致错误。因此,为避免该错误,可将检查status属性封装在try-catch语句。
    overrideMimeType():是用于重新xhr响应的MIME类型方法。返回响应的MIME类型决定了xhr对象如何处理它,因此提供一种方法对MIME类型重写是很有用的。
    var xhr = createXHR();
    xhr.open("get", "text.php", true);
    xhr.overrideMimeType("text/xml");
    xhr.send(null);
    上例中调用overrideMimeType()方法必须在send()方法之前,才能保证重写响应类型。
    overrideMimeType()方法是level 1级方法,level 2标准提供xhr.responseType属性。

    相关文章

      网友评论

          本文标题:Chapter 21. ajax与comet

          本文链接:https://www.haomeiwen.com/subject/hgubbftx.html