什么是服务器

网页浏览过程分析

一个完整的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. 《Think in Java》(九)接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法: 抽象化类则是普通类与接口之间的一种中庸之道: 涨姿势了 接口也可以拥有值属性,但它们都是隐式的 static 和 final 的: 接 ...

  2. release与debug的区别

    http://www.cnblogs.com/JemBai/archive/2009/01/13/1374805.html

  3. IIS7配置PHP简要说明

    1. IIS7 安装的时候 要注意三个地方打得勾 万维网服务->应用程序开发功能->CGI ->ISAPI扩展 ->ISAPI筛选器 注:   CGI  会在IIS7+PHP_ ...

  4. 配置SSH密码登录

    在客户端生成公钥: ssh-keygen –t rsa 生成的公钥默认位置在~/.ssh/目录 把公钥上传到服务器端: scp id_rsa.pub root@ip地址:文件保存路径 cat id_r ...

  5. windows7安装PyQt5(通过pip install 安装)

    开始接触PyQt5 ,总结了一下安装的方法 默认各位已经安装好了Python环境 首先,确定一下之前没有安装过pyqt5,如果安装了,可以先卸载,避免出现意外, 之前装了几次没成功就是这种情况,卸载命 ...

  6. webservice 传输数据过大,解析失败

    ERROR 错误信息: 已超过传入消息(65536)的最大消息大小配额.若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性. 错误场景: webservice 服 ...

  7. Spring_总结_04_高级配置(六)_Bean的初始化和销毁

    一.前言 本文承接上一节:Spring_总结_04_高级配置(五)_运行时注入值

  8. python3的map(),filter()和reduce()函数总结

    这三个都是内置的常用高阶函数(Higher-order function),用法如下: map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把 ...

  9. AtCoder Petrozavodsk Contest 001 B - Two Arrays

    Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement You are given two inte ...

  10. BZOJ1280: Emmy卖猪pigs

    BZOJ1280: Emmy卖猪pigs https://lydsy.com/JudgeOnline/problem.php?id=1280 分析: 这题感觉还好,因为是有时间顺序,所以拆点做最大流即 ...