什么是服务器

网页浏览过程分析

一个完整的HTTP请求过程,通常有下面7个步骤

  1. 建立TCP连接
  2. Web浏览器向Web服务器发送请求命令
  3. Web浏览器发送请求头信息
  4. Web服务器- 应答
  5. Web服务器- 发送应答头信息
  6. Web服务器- 向浏览器发送数据
  7. Web服务器- 关闭TCP连接

    如何配置自己的服务器程序(AMP)

    Ajax必须在服务器环境下才能正常使用

  • 我使用的WampServer程序.(支持中文)官网连接.可能速度不行,不过科学上网,大家应该都会.
  • 网上的使用教程:如何安装使用
  • XAMPP–我试了一下,还是wamp简单,大家有兴趣就自己去测试了
  • 推荐使用firefox浏览器进行AJAX的调试。

Ajax原理

什么是Ajax?

  • 无刷新数据读取

    • 用户注册/在线聊天室
    • 理解同步和异步(基本都用异步请求).

      同步: 客户端发起请求–等待–>服务器端处理—等待–>响应–>页面载入 (请求错误时全部重新载入).
      异步: 客户端发起请求—>服务器端处理—>响应—>页面载入(填写时,即时更新,部分返回).

HTTP请求

  • 一个HTTP请求一般由四部分组成
    1. HTTP请求的方法或动作如是GET还是POST请求
    2. 正在请求的URL,总得知道请求的地址是什么吧?
    3. 请求头,包含一些客户端环境信息,身份验证信息等
    4. 请求体,也就是请求正文,请求正文中可以包含客户端提交的查询字符串信息,表单信息等等.

HTTP响应

  • 一个HTTP响应一般由三部分组成:
    1. 一个数字文字组成的状态码,用来显示请求是成功还是失败
    2. 响应头,响应头和请求头一样包含许多有用的信息,例如服务器类型,日期时间,内容类型和长度等.
    3. 响应体,也就是响应正文.

HTTP请求方式

GET POST
用于信息获取/查询(如:浏览帖子) 用于修改服务器上的资源(如:用户注册)
安全性低(使用url传递参数所有人可见) 安全性一般(至少不可见)
容量低(2000个字符) 容量几乎无限

常见的HTTP状态码

状态码 描述 原因短语
200 请求成功.一般用于GET和POST方法 OK
301 资源移动.所请求资源移动到新的URL,浏览器自动跳转到新的URL Moved Permanently
304 未修改.所请求资源未修改读取缓存数据 Not Modified
400 请求语法错误,服务器无法理解 Bad Request
404 未找到资源,可以设置个性”404页面” Not Found
500 服务器内部错误 internal Server Error

编写Ajax

类比打电话理解Ajax编写步骤

打电话 ajax请求
1.打电话 1.创建Ajax对象
2.拨号 2.连接服务器
3.建立连接 3.发送请求
4.听 4.接受返回

1.创建Ajax对象

  • IE6:ActiveXObject("Microsoft.XMLHTTP");//IE6已死,可以不考虑了
  • XMLHttpRequest();

例:var request = new XMLHttpRequest();

2.连接服务器

  • open(method,url,async);
  • open(发送请求方法”GET/POST” ,(请求地址”文件名”) ,是否异步传输)

例: request.open("GET","get.json",true);

3.发送请求

  • send(string)

    • 在使用GET方式请求时无需填写参数
    • 在使用POST方式时参数代表着向服务器发送的数据
1
2
3
4
5
6
7
8
9
10
//完整的GET请求
var oAjax = new XMLHttpRequest();//创建Ajax对象
oAjax.open("GET","create.php",true);//连接服务器
oAjax.send();//发送请求 //完整的POST发送请求
var oAjax = new XMLHttpRequest();//创建
oAjax.open("POST","create.php",true);//"POST"
oAjax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");//设置HTTP头信息.必须在open与send之间,否则出现异常.
oAjax.send("name=陈二狗&sex=男");//发送给服务器的内容

4.接收返回-请求状态监控

  • XMLHttpRequset取得响应
属性
responseText 获得字符串形式的响应数据
responseXML 获得XML形式的响应数据
statusstatusText 以数字和文本方式返回HTTP状态码
getAllResponseHeader() 获取所有的响应报头
getResponseheader() 查询响应中的某个字段的值
  • onreadystatechange事件

    通过监听onreadystatechange事件,来判断请求的状态.

  • readyState属性:响应返回所处状态

状态码 状态 所处位置
0 (未初始化) 还没有调用open()方法
1 (载入) 已调用send()方法,正在发送请求
2 (载入完成) send()方法完成,已经收到全部响应 内容
3 (解析) 正在解析响应内容
4 (完成) 响应内容解析完成,可以在客户端调用了

例:

1
2
3
4
5
6
7
8
9
10
11
12
//基本完整的一个Ajax请求
var request = new XMLHttpRequest();
request.open("GET","get.json",true);
request.onreadystatechange = function () {
if (request.readyState === 4) {
if (request.status === 200) {
//响应成功,做一些事情
} else {
//响应失败,做一些事情
}
}
};

使用函数简单的封装一个get请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* 一个简单的异步get请求
* @param {String} url 请求地址,文件名
* @param {Function} fnSucc 请求成功时执行的函数,形参为为获取的字符串值.
* @param {Function} fnFaild 请求失败执行的函数,可选参数
*/
function get(url, fnSucc, fnFaild) {
//1.创建ajax对象
var oAjax = null
//此处必须需要使用window.的方式,表示为window对象的一个属性.不存在是值为undefined,进入else/若直接使用XMLHttpRequest在不支持的情况下会报错
if (window.XMLHttpRequest) {
oAjax = new XMLHttpRequest();
} else {
//IE6以上,现在应该不需要考虑IE6了
oAjax = new ActiveXObject("Microsoft.XMLHTTP");
}
//2.连接服务器
//open(方法,url,是否异步)
oAjax.open("GET", url, true);
//3.发送请求
oAjax.send();
//4.接收返回
//OnRedayStateChange事件
oAjax.onreadystatechange = function () {
if (oAjax.readyState === 4) {
if (oAjax.status === 200) {
fnSucc(oAjax.responseText);
} else {
if (fnFaild) {
fnFaild();
}
}
}
};
}

使用Ajax

基础:请求并显示静态TXT文件

  • 字符集编码:不一致时会出现乱码
  • 缓存,阻止缓存,(使用时间对象添加)

动态数据:请求JS(或JSON)文件

注:并不推荐使用eval,并不推荐使用eval,并不推荐使用eval。因为eval解析数据时会有一系列问题出现。这里是因为只是学习就随意点了。
在需要解析请求数据时,推荐使用JSON的方法JSON.parse()可以将一个 JSON 字符串解析成为一个 JavaScript 值。参考MDN-JSON

  • eval的使用
    例:
1
2
3
4
5
6
7
8
9
10
var str = "54-8*6+4";
alert(eval(str)); //10; var str1 = "[1,2,3]";
var arr = eval(str1);
alert(arr[1]);//2 var str3 = "function show(){alert('abc');}";
eval(str3);
show() //abc

一次成功的get请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//已经引入get函数
//数据文件放在同级目录下就行了。
get("json.js", function (str) {
var arr = eval(str);
alert(arr[0].a);
}, function () {
alert("服务器请求失败!");
});
//json.js存放的文件如下
/*
[{
a: 12,
b: 5
}, {
a: 2,
b: 56
}]
*/
//服务器响应成功时,将返回12.
  • DOM创建元素

    • 局部刷新:请求并显示部分网页文件,使用for循环.
    • 这里是属于DOM操作的范围,在这里就不过多讲述了。

From:http://guowenfh.github.io/2015/12/18/Ajax-elementary-course-1/

Ajax入门(一)从0开始到一次成功的GET请求的更多相关文章

  1. Ajax入门(二)Ajax函数封装

    如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...

  2. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

  3. AJAX入门---DOM操作HTML

    AJAX入门---DOM操作HTML 一边学习AJAX一边坐着总结加深印象.上次写的是怎样简单的使用XMLHttpRequest对象.今天写的是DOM(文档对象模型(Document Object M ...

  4. ajax入门之建立XHR对象 (1)

    ajax入门之建立XHR对象 今天帮朋友写了一个简单的ajax的demo,发现了一些东西,决定写一篇文章记录一下,避免以后挖坑. 创建XMLHttpRequest 通常 function create ...

  5. ASP.NET AJAX入门系列(4):使用UpdatePanel控件(一)

    UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加 ...

  6. ASP.NET AJAX入门系列(1):概述

    经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...

  7. ASP.NET AJAX入门系列

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  8. 系列文章--ASP.NET之AJAX入门教程

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  9. JavaEE的ajax入门

    JavaEE的ajax入门 代码下载 链接:https://pan.baidu.com/s/1pb_sdSmV9Ncs6UIz3q2ztg 提取码:fgx6 复制这段内容后打开百度网盘手机App,操作 ...

随机推荐

  1. spring: 使用嵌入式数据源 EmbeddedDatabaseBuilder

    嵌入式数据源作为应用的一部分运行,非常适合在开发和测试环境中使用,但是不适合用于生产环境.因为在使用嵌入式数据源的情况下,你可以在每次应用启动或者每次运行单元测试之前初始化测试数据. 使用Spring ...

  2. shell 学习之脚本编写1

    脚本要求: 执行脚本后 接受输入1,显示当前时间,并提示是否继续选择. 接受输入2,显示CPU负载,并提示是否继续选择.  接受输入3,显示剩余内存,并提示是否继续选择. 接受输入0,退出脚本. ·· ...

  3. zoj 3963 Heap Partition(并查集,贪心,二分)

    Heap Partition Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A sequence S = { ...

  4. c++中对齐方式

    使用cout<<setiosflags(ios::right)以后, 再调用 cout<<setiosflags(ios::left);无效的, 你可以在调用之前加上一句 co ...

  5. GIT和SVN比较

    SVN与Git比较 摘要Svn是目前得到大多数人认可,使用得最多的版本控制管理工具,而Git的优势在于易于本地增加分支和分布式的特性,可离线提交,解决了异地团队协同开发等svn不能解决的问题.本文就这 ...

  6. 条款35:考虑virtual函数以外的其他选择

    有一部分人总是主张virtual函数几乎总应该是private:例如下面这个例子,例子时候游戏,游戏里面的任务都拥有健康值这一属性: class GameCharacter{ public: int ...

  7. linux 缺少libxxx.a 静态链接库

    首先去官方网站下载gdb的源码包,我下载的7.4.1版本的源码包,解压开来,进入到源码包的根目录下.对于一个源码包,拿到手里首先要阅读的就是README,然后看一下INSTALL文件,这个文件里编译源 ...

  8. C# 如何将对象写入文件

    http://wenku.baidu.com/link?url=QwDRlO1TeoubnmtUOitXXTRa-eZ6QFKvEuyXyzLXD9c0qCRUV5TL9Fq7_HqvxrMcwsAL ...

  9. mysql-jdbc创建connection理解

    jdbc源码分析(http://blog.csdn.net/brilliancezhou/article/details/5499738) 创建JDBC连接代码 Class.forName(" ...

  10. Qt之事件处理机制

    思维导读 一.事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下 ...