一、HTTP协议
1、HTTP: 计算机通过网络进行通讯的规则,用于浏览器向服务器发送请求。
2、HTTP是一种无状态的协议,无状态是指服务器端不保留任何连接相关的信息,浏览器客户端向服务器发送请求,服务器端返回响应,然后连接就关闭了,这个连接不存在任何记忆。后续的处理如果需要之前连接传递的信息,则需要重新传递。
3、完整的HTTP请求需要以下7个步骤:
(1)建立TCP连接,通常HTTP协议都是用TCP协议连接,TCP是可靠的协议。
(2)Web浏览器向Web服务器发送请求命令。
(3)Web浏览器发送请求头信息。
(4)Web服务器应答。
(5)Web服务器发送应答头信息。
(6)Web服务器向浏览器发送数据。
(7)Web服务器关闭TCP连接。
4、一个HTTP请求包含四个部分:
(1)HTTP请求的方法:GET或者POST。
(2)请求的URL,即请求的地址。
(3)请求头,包含客户端环境信息、身份验证信息等。
(4)请求体,也就是请求正文,包含客户提交的查询字符串信息、表单信息等。
5、GET方法与POST方法
(1)GET:一般用于获取信息,即查。使用URL传递参数,参数一般为用户获取信息的条件。HTTP协议默认使用的方法是GET方法,对于查询请求,GET方法是安全的,但用GET方法发送用户名和密码是不安全的,因为GET请求发送的信息对任何人都是可见的,GET请求所传输的数据都会显示在URL路径中。GET方法对所发送信息的数量有限制,一般在2000个字符。
(2)POST:一般用于修改服务器上的资源,即增、删、改等。一般是通过表单向服务器传递数据,所传递的数据并不可见,所传递的都被封装在请求体中。
6、一个HTTP相应包含三个部分:
(1)响应码:一个数字或文字组成的状态码,用来显示请求成功还是失败。
(2)响应头:包含服务器的信息,如服务器类型、日期时间、内容类型和长度等。
(3)响应体:响应正文,即返回的响应信息内容。
7、HTTP响应状态码介绍:
1XX:信息类,表示收到WEB浏览器的请求,正在进一步的处理中。
2XX:成功,表示用户的请求被正确接收、理解和处理:如200 OK。
3XX:重定向,表示请求没有成功,客户必须采取进一步的动作。
4XX:常见,客户端提交的请求有错误,比如:404 NOT FOUND,意味请求的路径不存在等。
5XX:常见,服务器错误,表示服务器不能完成对请求的处理,比如500错误。
二、使用XMLHttpRequest对象发送请求:
AJAX最重要的部分就是使用XMLHttpRequest对象发送请求,XMLHttpRequest对象针对IE7以上、Firefox、Chrome、Safari以及Opera,对于IE5和IE6则使用ActiveXObject对象,因此创建对象的方法如下:
var xmlHttpRequest;
if(window.XMLHttpRequest){//存在XMLHttpRequest,表示是IE7及其他主流浏览器。
     xmlHttpRequest = new XMLHttpRequest();
}else{
     xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
该对象通过两个方法发送请求。
1、open(method,url,async):
method:POST或者GET。
url:请求的路径。
async:是否异步,true表示异步,false表示同步,默认为true,AJAX一般用异步。
备注:同步和异步:同步表示同一时间只能执行一个请求,后面的请求必须等到前面的请求执行完毕才能继续执行;异步表示多个请求可以同时执行,不必等待前一个请求执行完毕,异步的请求效率远远高于同步请求。
2、send(string):发送请求,send(string)方法的String类型的参数用于传递请求的参数,由于GET方法的参数通常接在url的后面,因此在使用GET方法发送请求时,send(string)方法的参数可以不填写或者填写null;而POST方法不能通过url传递参数,因此当使用POST方法发送请求时,通常send(string) 方法String类型的参数都要填写,当然不填写也没有错,但应用情况很少。
3、XMLHttpRequest.setRequestHeader()方法
     setRequestHeader()方法用于在发送HTTP请求时对请求头包含信息的设置和更改。通常有两个参数,第一个参数表示请求头中的字段名称,第二个参数表示该字段名称对应的内容。比如原始请求头:
        GET /bb.asp?www=1234 HTTP/1.1 
  Accept: */* 
  Accept-Language: zh-cn 
  UA-CPU: x86 
  Accept-Encoding: gzip, deflate 
  User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) 
  Host: www.e4j.cn:89 
  Connection: Keep-Alive 
  Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
调用setRequestHeader()方法对请求头信息进行更改:
         xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
         xmlHttpRequest .setRequestHeader("Content-length", paramsSend.length);
此时的请求头内容为:
        GET /bb.asp?www=1234 HTTP/1.1 
  Accept: */* 
  Accept-Language: zh-cn 
  UA-CPU: x86 
  Accept-Encoding: gzip, deflate 
  User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) 
  CONTENT-TYPE:application/x-www-form-urlencoded 
  Host: www.e4j.cn:89 
  Content-length: 8 
  Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
     xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");设置了一个请求头,表示设置提交给服务器文本内容的编码方式是URL编码,还有其他编码方式,比如文件上传的 CONTENT-TYPE:multipart/form-data
    xmlHttpRequest .setRequestHeader("Content-length", paramsSend.length);表示提交的数据的字节大小,对于采用GET方法提交的请求,由于不需要提交数据,Content-length 是无效的。
     XMLHttpRequest.setRequestHeader()方法必须写在open()和send(string)方法的中间,否则会抛出异常。
4、XMLHttpRequest取得响应
     responseText:获得字符串形式的响应数据。
     responseXML:获得XML形式的响应数据。通常应用中都是用Json返回响应信息。
     status和statusText:以数字和文本形式返回HTTP状态码
     getAllResponseHeader(): 获取所有的响应报头
     getResponseHeader(String string): 查询响应中的某个字段的值。
5、监听响应状态
     readyState属性:
     0:请求未初始化,open还没有调用。
     1:服务器连接已建立,open已经调用了。
     2:请求已接收,已经接收到头信息了。
     3:请求处理中,已经接收到响应主体了。
     4:请求已完成,响应完成了。
     监听响应状态的方法:onreadystatechange事件,在readyState属性变化的时候会触发,
     var request = new  XMLHttpRequest();
     request.open("GET","get.php",true);
     request.send();
     request.onreadystatechange = function(){
          if(request.readystate === 4 && request.statue === 200){//readystate表示响应状态,status表示请求状态
                        do something; 
          }
     }
     备注:在js中两个等号和三个等号的区别,如果采用两个等号比较大小,当“==”两边的变量类型不相同时,会自动转换成相同的类型再进行比较;当采用三个等号时,“===”两边变量的类型不相同,则比较结果为不等。比如:
      var a = 0, b = ‘0’;  alert((a == b) + ‘–‘ + (a === b))此时看到的结果为“true–false”。
    具体比较规则见链接:http://zzstudy.offcn.com/archives/10937  
   参考资料网址:慕课网Ajax全接触视频:

   XMLHttpRequest.setRequestHeader()

AJAX学习笔记(一)基础知识的更多相关文章

  1. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  2. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  3. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  4. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  5. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  6. .net学习笔记---xml基础知识

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  7. Docker的学习笔记(一)基础知识

    概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...

  8. Scala学习笔记--正则表达式基础知识、如何在scala内使用

    正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...

  9. (C/C++学习笔记) 一. 基础知识

    一. 基础知识 ● 程序和C/C++ 程序: 根据Wirth (1976), Algorithms + Data Structures = Programs. Whence C: 1972, Denn ...

  10. C#学习笔记(基础知识回顾)之枚举

    一:枚举的含义 枚举是用户定义的整数类型.在声明一个枚举时,要指定该枚举的示例可以包含的一组可接受的值.还可以给值指定易于记忆的名称.个人理解就是为一组整数值赋予意义. 二:枚举的优势 2.1:枚举可 ...

随机推荐

  1. Swift和Javascript的神奇魔法

    Swift和Javascript的神奇魔法 记录Swift和Javascript如何进行交互 前言 今天在网上看到了一篇介绍Swift和Javascript交互的文章,感觉作者写的很好,因此把作者文章 ...

  2. Longest Palindromic Substring2015年6月20日

    Given a , and there exists one unique longest palindromic substring. 自己的解决方案; public class Solution ...

  3. python csv例子

    import csv fieldnames = ['Column1', 'Column2', 'Column3', 'Column4'] rows = [{'Column1': '0', 'Colum ...

  4. One day one cf,Keep Wa away from me.

    Codeforces Round #379 (Div. 2) A水,算字符个数 B水,贪心优先组成后者 C贪心尺取,以消耗排序change那个,然后贪心另一个 D对角线就是x0+y0 == x1+y1 ...

  5. Vue之Vuex

    一.什么是vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.简单来说就是一个数据统一 ...

  6. 开涛spring3(2.1) - IoC基础

    2.1.1  IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在 ...

  7. sublime工具篇

    sublime快捷键的应用 熟悉掌握sublime快捷键,提高编码效率,享受编码乐趣. window操作系统常用快捷键 win+D:快速显示桌面     win+方向键:最大化最小化窗口  win+L ...

  8. hdu4081

    hdu4081 题意 给出n个点坐标,每个点有权值,要求得到一颗生成树,且其中有一条道路修建不需要花费,但是要求这条道路所连接的两点的权值之和除以剩下所有道路的距离花费最大. 分析 首先求最小生成树, ...

  9. 网络编程应用:基于TCP协议【实现文件上传】--练习

    要求: 基于TCP协议实现一个向服务器端上传文件的功能 客户端代码: package Homework2; import java.io.File; import java.io.FileInputS ...

  10. Blend在WPF开发过程中的作用

    WPF开发时,用VS2012就足够了,因为里面的确有控件拖放编辑和便利的带输入自动完成的xaml编辑器. 但是在需要改变某些控件的样式时,特别是style和template是,看网上搜到的教程,洋洋洒 ...