HTTP服务
1、服务器
服务器类型
服务类型:文件服务器、数据库服务器、邮件服务器、Web服务器等;
操作系统:Linux服务器、Windows服务器等;
应用软件:Apache服务器、Nginx 服务器、IIS服务器、Tomcat服务器、 weblogic服务器、WebSphere服务器、boss服务器、 Node服务器等;
服务器软件
概念:使计算机具备提供某种服务能力的应用软件,称为服务器软件, 通过安装相应的服务软件,然后进行配置后就可以使计算具备了提供某种服务的能力
文件服务器:Server-U、FileZilla、VsFTP等(FTP是File Transfer Protocol文件传输协议);
数据库服务器:oracle、mysql、SQL server、DB2、ACCESS等;
邮件服务器:Postfix、Sendmail等;
HTTP服务器:Apache、Nginx、IIS、Tomcat、NodeJS等;
HTTP服务器:
即网站服务器,主要提供文档(文本、图片、视频、音频)浏览服务,一般安装Apache、Nginx服务器软件。
服务端开发:HTTP服务器可以结合某一编程语言处理业务逻辑,由此进行的开发,通常称之为服务端开发
运行在服务端的编程语言: php、java、.net、Python、Ruby、Perl等。
2、客户端
具有向服务器索取服务能力的终端
客户端软件:通过安装不同的客户端软件, 可以获取不同的服务,比如通过QQ获得即时通讯服务、通过迅雷获得下载服务等。常见的客户端软件:浏览器、QQ、迅雷、Foxmail等。
前端开发:以浏览器为宿主环境,结合 HTML、CSS、Javascript等技术,而进行的一系列开发,通常称之为前端开发。
3、网络基础
IP地址
给每个连接在互联网上的主机分配的一个32位地址。(就像每部手机能正常通话需要一个号码一样);
查看本机IP地址 ping、ipconfig、ifconfig(linux)
域名
域名是一个IP地址的“面具”; 域名与IP地址一一映射,就像手机号与所代表的人一样
DNS服务
DNS(Domain Name System) 因特网上作为域名和IP地址相互映射的一个分布式数据库
查找优先级 本机hosts文件、DNS服务器
ipconfig /flushdns 刷新DNS
端口
端口号是计算机与外界通讯交流的出口,每个端口对应不同的服务。
查看端口占用情况 netstat -an
常见端口号 80、8080、3306、21、22
4、软件架构
C/S结构
Client、Server 不同的服务需要安装不同的客户端软件
比如QQ、迅雷、Foxmail这种情况下安装的软件会越来越多,同时也有许多弊端,不方便,如果当前客户端上面没有安装软件,如QQ就看不到消息,需要下载登录才能查看信息
B/S结构
Broswer、Server 将所有的服务都可以通过浏览器来完成
但B/S也有一些不利,比如操作稳定性、流畅度等方面相对较弱。
5、搭建HTTP服务
1、安装WampServer Windows + Apache + Mysql + PHP,首字母组合。 指定安装路径
2、管理HTTP服务 绿色为正常启动状态
注意事项
1、检查网络是不是通的 ping 对方IP
2、检查防火墙是否开启,如果开启将不能正常被访问
3、检查访问权限 Allow from all
4、理解默认索引
5、确保端口没有被其它程序占用
6、“#”表示注释
7、修改配置要格外小心,禁止无意修改其它内容
3、配置根目录
1、打开配置文件
wampserver安装目录下bin\apache\Apache2.2.21\conf\httpd.conf
2、设定根目录,查找并修改
DocumentRoot "D:/wamp/www/" 改成 DocumentRoot "E/www/" 这样就指定了 "E:/www/"为存放网站的根目录。
3、配置根目录
查找 <Directory "D:wamp/www/"> 修改成 <Directory "E:/www/">
4、重启Apache
4、网站部署
将制作好的网页拷贝到配置好的根目录下,浏览器访问127.0.0.1即可
5、配置虚拟主机
更改host文件
6、PHP基础
1、 <?php 这里是代码 ?>
1、避免使用中文目录和中文文件名
2、php页面无法直接打开,需要运行在服务器环境当中
2、变量
1、变量以$开头 字母/数字/下划线 不能以数字开头
2、大小写敏感(区分大小写)
举例 : // 声明一个变量$a并赋值为10 $a = 10;
3、数据类型
字符型 $str = 'hello world!';
整型 $num = 10;
浮点型 $float = 10.5;
布尔型 $bool = true;
数组
$arr = array(1, 2, 3); // 这种方式叫做**索引数组**
$arr1 = array('name'=>'itcast', 'age'=>10) // 这种方式叫做**关联数组**
对象
class Person {
public $name = 'itcast';
public $age = 10;
}
$person = new Person;
// PHP访问一个对象属性的语法是不一样的
echo $person->name;
// obj['name']; obj.name 不行
NULL
//PHP中一种特殊的数据类型,表示空值,即表示没有为该变量设置任何值null(空值)不区分大小写,null和NULL是一样的。
单引号&双引号区别
单引号内部的变量不会执行 双引号会执行
举例 $name = '小明‘;
echo 'name is $name';//输出 name is $name
echo "name is $name";//输出 name is 小明
4、运算符
基本与Javascript语法一致 .号表示字符串拼接符,Javascript中为+号
5、内容输出
echo:输出简单数据类型,如字符串、数值
print_r():输出复杂数据类型,如数组
var_dump():输出详细信息,如对象、数组(了解)
6、函数
1、PHP中函数不可以省略参数
2、PHP可以设置默认参数
3、函数名对大小写不敏感
4、基本与Javascript基本一致
举例: function sayHello($name='web developer') { echo $name . '你好!';}
sayHello();
7、分支, 循环语句
foreach 数组遍历函数,类似Javascript中的 for in
foreach($arr as $k=>$v) {
echo $k . '~~~' . $v;
};
$length = count($arr); // PHP函数,计算数组的长度
8、表单处理
表单name属性的是用来提供给服务端接收所传递数据而设置的
表单action属性设置接收数据的处理程序
表单method属性设置发送数据的方式
当上传文件是需要设置 enctype="multipart/form-data",且只能post方式
$_GET接收 get 传值
$_POST接收 post 传值
$_FILES接收文件上传 举例如下
<form action="login.php" method="post">
<div class="row">
<label>用户:</label><input type="text" name="username"/>
</div>
<div class="row">
<label>密码:</label><input type="password" name="password"/>
</div>
<div class="row">
<input type="submit" value="登录"/>
</div>
</form>
<form action="login.php" method="post" enctype="multipart/form-data">
<div class="row">
<label>图片:</label><input type="file" name="image"/>
</div>
<div class="row">
<input type="submit" value="上传"/>
</div>
</form>
move_uploaded_file($_FILES['image']['tmp_name'], 'test.jpg');
9、文件导入
include '07.form.html';
require '07.form.php'
10、常用php函数
$array = array(
'username'=>'itcast',
'password'=>'123456'
);

echo '获取数组的长度:'.count($array);
echo '<br>';
echo '判断是否在数组中:'.in_array('itcast',$array);
echo '<br>';
echo '检测数组中是否存在key:'.array_key_exists('username',$array);
echo '<br>';
7、网络传输协议
1、常见协议
1、HTTP、HTTPS 超文本传输协议
2、FTP 文件传输协议
3、SMTP 简单邮件传输协议
2、http协议
超文本传输协议(HTTP,HyperText Transfer Protocol) 网站是基于HTTP协议的, 例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。
html 超文本标记语言 HTML Hypertext Markup Language
HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范。
即HTTP协议主要由请求和响应构成
常用请求方法 POST、GET、PUT、DELETE
3、请求和请求报文
请求由客户端发起,其规范格式为:请求行、请求头、请求主体。
1、请求行
由请求方式、请求URL和协议版本构成
GET /day01/code/login.php?username=123&password=123 HTTP/1.1
POST /day01/code/login.php HTTP/1.1
2、请求头
Host:localhost请求的主机
Cache-Control:max-age=0控制缓存
Accept:/ 接受的文档MIME类型
User-Agent:很重要
Referer:从哪个URL跳转过来的
Accept-Encoding:可接受的压缩格式
If-None-Match:记录服务器响应的ETag值,用于控制缓存 此值是由服务器自动生成的
If-Modified-Since:记录服务器响应的Last-Modified值 此值是由服务器自动生成的
3、请求主体
即传递给服务端的数据
当以post形式提交表单的时候,请求头里需要设置 Content-Type: application/x-www-form-urlencoded,以get形式当不需要
4、响应和响应报文
响应由服务器发出,其规范格式为:状态行、响应头、响应主体
1、响应状态行
由协议版本号、状态码和状态信息构成 HTTP/1.1 200 OK
2、响应头
Date:响应时间
Server:服务器信息
Last-Modified:资源最后修改时间 由服务器自动生成
ETag:资源修改后生成的唯一标识 由服务器自动生成
Content-Length:响应主体长度
Content-Type:响应资源的类型
3、响应主体
即服务端返回给客户端的内容;
4、状态码 xhr.status 的值
常见的有200代表成功、304文档未修改、403没有权限、404未找到、500服务器错误
8 、 AJAX编程
即 Asynchronous [e'sɪŋkrənəs] Javascript And XML, AJAX 不是一门的新的语言,而是对现有技术的综合利用。 本质是在HTTP协议的基础上以异步的方式与服务器进行通信。
异步
指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步
其优势在于不阻塞程序的执行,从而提升整体执行效率。
XMLHttpRequest可以以异步方式的处理程序。
XMLHttpRequest
浏览器内建对象,用于在后台与服务器通信(交换数据) , 由此我们便可实现对网页的部分更新,而不是刷新整个页面。
js 内置的 http 请求对象 XMLHttpRequest
XMLHttpRequest 请求
请求行
xhr.open('post','01.php');
请求头
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
get请求可以不设置
请求主体
xhr.send("name=xjj&age=10");
get可以传空 null
注意书写顺序
XMLHttpRequest 响应 知识点
HTTP响应是由服务端发出的
HTTP响应3个组成部分与XMLHttpRequest方法或属性的对应关系。
由于服务器做出响应需要时间(比如网速慢等原因),所以我们需要监听服务器响应的状态,然后才能进行处理。
onreadystatechange是Javascript的事件的一种,其意义在于监听XMLHttpRequest的状态
xhr.readyState 响应状态
0:请求未初始化(还没有调用 open())。
1:请求已经建立,但是还没有发送(还没有调用 send())。
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4:响应已完成;您可以获取并使用服务器的响应了。
响应成功获取信息
1、获取状态行 状态码 和 状态信息
xhr.status 状态码
xhr.statusText 状态码信息
2、获取响应头
xhr.getResponseHeader('Content-Type'); 传参获取部分信息
xhr.getAllResponseHeaders(); 获取响应头中的所有信息
3、获取响应主体
xhr.responseText 获取json格式的数据
xhr.responseXML 获取XML格式的数据
我们需要检测并判断响应头的MIME类型后确定使用request.responseText或者request.responseXML
API详解
xhr.open() 发起请求,可以是get、post方式,默认get
xhr.setRequestHeader() 设置请求头 get不用设置 post需要设置
xhr.send() 发送请求主体get方式使用xhr.send(null) post需要传数据 可以是json对象、带&的字符串,固定样式的数组
xhr.onreadystatechange = function () {} 监听响应状态
xhr.status表示响应码,如200
xhr.statusText表示响应信息,如OK
xhr.getAllResponseHeaders() 获取全部响应头信息
xhr.getResponseHeader('key') 获取指定头信息
xhr.responseText、xhr.responseXML都表示响应主体
get 和 post 请求方式的差异
1、GET没有请求主体,使用xhr.send(null)
2、GET可以通过在请求URL上添加请求参数
3、POST可以通过xhr.send('name=itcast&age=10')
4、POST需要设置
5、GET效率更好(应用多)
6、GET大小限制约4K,POST则没有限制
XML数据
1、必须有一个根元素
2、不可有空格、不可以数字或.开头、大小写敏感
3、不可交叉嵌套
4、属性双引号(浏览器自动修正成双引号了)
5、特殊符号要使用实体
6、注释和HTML一样
虽然可以描述和传输复杂数据,但是其解析过于复杂并且体积较大,所以实现开发已经很少使用了。
JSON
即 JavaScript Object Notation,另一种轻量级的文本数据交换格式,独立于语言。
数据结构的要求
1、数据在名称/值对中
2、数据由逗号分隔(最后一个健/值对不能带逗号)
3、花括号保存对象方括号保存数组
4、使用双引号
JSON数据在不同语言进行传输时,类型为字符串,不同的语言各自也都对应有解析方法,需要解析完成后才能读取
PHP解析方法
/*将php数组转化成json字符*/
$json_array = json_encode($array);
/*将json字符转化成php数组*/
$array_json = json_decode($json_array);
Javascript 解析方法
JSON对象 JSON.parse()、JSON.stringify();
JSON兼容处理json2.js
总结:JSON体积小、解析方便且高效,在实际开发成为首选。
/*需要把字符串转化成JSON对象*/
var json_obj = JSON.parse(text);
/*我们也可以把JSON对象转化成字符串*/
var json_str = JSON.stringify(json_obj);
兼容性
IE的兼容 需要加标识
9、封装ajax工具函数 参数对象思路
*1. 请求的类型 type get post
* 2. 请求地址 url
* 3. 是异步的还是同步的 async false true
* 4. 请求内容的格式 contentType
* 5. 传输的数据 data json对象
* 6.响应成功处理函数 success function
* 7.响应失败的处理函数 error function
10、jQuary的ajax方法
jQuery为我们提供了更强大的Ajax封装
$.ajax({}) 可配置方式发起Ajax请求
$.get() 以GET方式发起Ajax请求
$.post() 以POST方式发起Ajax请求
$('form').serialize() 序列化表单(即格式化key=val&key=val)
url 接口地址
type 请求方式
timeout 请求超时
dataType 服务器返回格式 json *jsonp等......
data 发送请求数据
beforeSend: function () {} 请求发起前调用
success 成功响应后调用
error 错误响应时调用
complete 响应完成时调用(包括成功和失败)
11、模板引擎
artTemplate 简介语法模板
<script src="dist/template.js"></script>
<script id="test" type="text/html">
<h1>{{title}}</h1>
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
</ul></script>
var data = {
title: '标签',
list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
};
var html = template('test', data);
document.getElementById('content').innerHTML = html;
artTemplate 原生 js 模板语法版
<script src="dist/template-native.js"></script>
<% 与 %> 符号包裹起来的语句则为模板的逻辑表达式。
模板不能访问全局对象 使用template.helper(name, callback) 然后在模板当中调用name()方法 声明一变量接受 就可以调用成员变量了
12 同源 & 跨域
同源
所谓同源是指,域名,协议,端口完全相同, 同源策略是浏览器的一种安全策略。
跨域
不同源则跨域
跨域方案
1、顶级域名相同的可以通过domain.name来解决,即同时设置 domain.name = 顶级域名(如example.com)
2、document.domain + iframe
3、window.name + iframe
4、location.hash + iframe
5、window.postMessage()
jsonp
JSON with Padding
其本质是利用了标签具有可跨域的特性, 由服务端返回一个预先定义好的Javascript函数的调用,并且将服务器数据以该函数参数的形式传递过来, 此方法需要前后端配合完成。
<script>
function fuc(data){
console.log(data.name);
}
</script>
<script src="http://www.guangzhou.com/api.php?callback=fuc"></script>
1、服务器
服务器类型
服务类型:文件服务器、数据库服务器、邮件服务器、Web服务器等;
操作系统:Linux服务器、Windows服务器等;
应用软件:Apache服务器、Nginx 服务器、IIS服务器、Tomcat服务器、 weblogic服务器、WebSphere服务器、boss服务器、 Node服务器等;
服务器软件
概念:使计算机具备提供某种服务能力的应用软件,称为服务器软件, 通过安装相应的服务软件,然后进行配置后就可以使计算具备了提供某种服务的能力
文件服务器:Server-U、FileZilla、VsFTP等(FTP是File Transfer Protocol文件传输协议);
数据库服务器:oracle、mysql、SQL server、DB2、ACCESS等;
邮件服务器:Postfix、Sendmail等;
HTTP服务器:Apache、Nginx、IIS、Tomcat、NodeJS等;
HTTP服务器:
即网站服务器,主要提供文档(文本、图片、视频、音频)浏览服务,一般安装Apache、Nginx服务器软件。
服务端开发:HTTP服务器可以结合某一编程语言处理业务逻辑,由此进行的开发,通常称之为服务端开发
运行在服务端的编程语言: php、java、.net、Python、Ruby、Perl等。
2、客户端
具有向服务器索取服务能力的终端
客户端软件:通过安装不同的客户端软件, 可以获取不同的服务,比如通过QQ获得即时通讯服务、通过迅雷获得下载服务等。常见的客户端软件:浏览器、QQ、迅雷、Foxmail等。
前端开发:以浏览器为宿主环境,结合 HTML、CSS、Javascript等技术,而进行的一系列开发,通常称之为前端开发。
3、网络基础
IP地址
给每个连接在互联网上的主机分配的一个32位地址。(就像每部手机能正常通话需要一个号码一样);
查看本机IP地址 ping、ipconfig、ifconfig(linux)
域名
域名是一个IP地址的“面具”; 域名与IP地址一一映射,就像手机号与所代表的人一样
DNS服务
DNS(Domain Name System) 因特网上作为域名和IP地址相互映射的一个分布式数据库
查找优先级 本机hosts文件、DNS服务器
ipconfig /flushdns 刷新DNS
端口
端口号是计算机与外界通讯交流的出口,每个端口对应不同的服务。
查看端口占用情况 netstat -an
常见端口号 80、8080、3306、21、22
4、软件架构
C/S结构
Client、Server 不同的服务需要安装不同的客户端软件
比如QQ、迅雷、Foxmail这种情况下安装的软件会越来越多,同时也有许多弊端,不方便,如果当前客户端上面没有安装软件,如QQ就看不到消息,需要下载登录才能查看信息
B/S结构
Broswer、Server 将所有的服务都可以通过浏览器来完成
但B/S也有一些不利,比如操作稳定性、流畅度等方面相对较弱。
5、搭建HTTP服务
1、安装WampServer Windows + Apache + Mysql + PHP,首字母组合。 指定安装路径
2、管理HTTP服务 绿色为正常启动状态
注意事项
1、检查网络是不是通的 ping 对方IP
2、检查防火墙是否开启,如果开启将不能正常被访问
3、检查访问权限 Allow from all
4、理解默认索引
5、确保端口没有被其它程序占用
6、“#”表示注释
7、修改配置要格外小心,禁止无意修改其它内容
3、配置根目录
1、打开配置文件
wampserver安装目录下bin\apache\Apache2.2.21\conf\httpd.conf
2、设定根目录,查找并修改
DocumentRoot "D:/wamp/www/" 改成 DocumentRoot "E/www/" 这样就指定了 "E:/www/"为存放网站的根目录。
3、配置根目录
查找 <Directory "D:wamp/www/"> 修改成 <Directory "E:/www/">
4、重启Apache
4、网站部署
将制作好的网页拷贝到配置好的根目录下,浏览器访问127.0.0.1即可
5、配置虚拟主机
更改host文件
6、PHP基础
1、 <?php 这里是代码 ?>
1、避免使用中文目录和中文文件名
2、php页面无法直接打开,需要运行在服务器环境当中
2、变量
1、变量以$开头 字母/数字/下划线 不能以数字开头
2、大小写敏感(区分大小写)
举例 : // 声明一个变量$a并赋值为10 $a = 10;
3、数据类型
字符型 $str = 'hello world!';
整型 $num = 10;
浮点型 $float = 10.5;
布尔型 $bool = true;
数组
$arr = array(1, 2, 3); // 这种方式叫做**索引数组**
$arr1 = array('name'=>'itcast', 'age'=>10) // 这种方式叫做**关联数组**
对象
class Person {
public $name = 'itcast';
public $age = 10;
}
$person = new Person;
// PHP访问一个对象属性的语法是不一样的
echo $person->name;
// obj['name']; obj.name 不行
NULL
//PHP中一种特殊的数据类型,表示空值,即表示没有为该变量设置任何值null(空值)不区分大小写,null和NULL是一样的。
单引号&双引号区别
单引号内部的变量不会执行 双引号会执行
举例 $name = '小明‘;
echo 'name is $name';//输出 name is $name
echo "name is $name";//输出 name is 小明
4、运算符
基本与Javascript语法一致 .号表示字符串拼接符,Javascript中为+号
5、内容输出
echo:输出简单数据类型,如字符串、数值
print_r():输出复杂数据类型,如数组
var_dump():输出详细信息,如对象、数组(了解)
6、函数
1、PHP中函数不可以省略参数
2、PHP可以设置默认参数
3、函数名对大小写不敏感
4、基本与Javascript基本一致
举例: function sayHello($name='web developer') { echo $name . '你好!';}
sayHello();
7、分支, 循环语句
foreach 数组遍历函数,类似Javascript中的 for in
foreach($arr as $k=>$v) {
echo $k . '~~~' . $v;
};
$length = count($arr); // PHP函数,计算数组的长度
8、表单处理
表单name属性的是用来提供给服务端接收所传递数据而设置的
表单action属性设置接收数据的处理程序
表单method属性设置发送数据的方式
当上传文件是需要设置 enctype="multipart/form-data",且只能post方式
$_GET接收 get 传值
$_POST接收 post 传值
$_FILES接收文件上传 举例如下
<form action="login.php" method="post">
<div class="row">
<label>用户:</label><input type="text" name="username"/>
</div>
<div class="row">
<label>密码:</label><input type="password" name="password"/>
</div>
<div class="row">
<input type="submit" value="登录"/>
</div>
</form>
<form action="login.php" method="post" enctype="multipart/form-data">
<div class="row">
<label>图片:</label><input type="file" name="image"/>
</div>
<div class="row">
<input type="submit" value="上传"/>
</div>
</form>
move_uploaded_file($_FILES['image']['tmp_name'], 'test.jpg');
9、文件导入
include '07.form.html';
require '07.form.php'
10、常用php函数
$array = array(
'username'=>'itcast',
'password'=>'123456'
);

echo '获取数组的长度:'.count($array);
echo '<br>';
echo '判断是否在数组中:'.in_array('itcast',$array);
echo '<br>';
echo '检测数组中是否存在key:'.array_key_exists('username',$array);
echo '<br>';
7、网络传输协议
1、常见协议
1、HTTP、HTTPS 超文本传输协议
2、FTP 文件传输协议
3、SMTP 简单邮件传输协议
2、http协议
超文本传输协议(HTTP,HyperText Transfer Protocol) 网站是基于HTTP协议的, 例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。
html 超文本标记语言 HTML Hypertext Markup Language
HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范。
即HTTP协议主要由请求和响应构成
常用请求方法 POST、GET、PUT、DELETE
3、请求和请求报文
请求由客户端发起,其规范格式为:请求行、请求头、请求主体。
1、请求行
由请求方式、请求URL和协议版本构成
GET /day01/code/login.php?username=123&password=123 HTTP/1.1
POST /day01/code/login.php HTTP/1.1
2、请求头
Host:localhost请求的主机
Cache-Control:max-age=0控制缓存
Accept:/ 接受的文档MIME类型
User-Agent:很重要
Referer:从哪个URL跳转过来的
Accept-Encoding:可接受的压缩格式
If-None-Match:记录服务器响应的ETag值,用于控制缓存 此值是由服务器自动生成的
If-Modified-Since:记录服务器响应的Last-Modified值 此值是由服务器自动生成的
3、请求主体
即传递给服务端的数据
当以post形式提交表单的时候,请求头里需要设置 Content-Type: application/x-www-form-urlencoded,以get形式当不需要
4、响应和响应报文
响应由服务器发出,其规范格式为:状态行、响应头、响应主体
1、响应状态行
由协议版本号、状态码和状态信息构成 HTTP/1.1 200 OK
2、响应头
Date:响应时间
Server:服务器信息
Last-Modified:资源最后修改时间 由服务器自动生成
ETag:资源修改后生成的唯一标识 由服务器自动生成
Content-Length:响应主体长度
Content-Type:响应资源的类型
3、响应主体
即服务端返回给客户端的内容;
4、状态码 xhr.status 的值
常见的有200代表成功、304文档未修改、403没有权限、404未找到、500服务器错误
8 、 AJAX编程
即 Asynchronous [e'sɪŋkrənəs] Javascript And XML, AJAX 不是一门的新的语言,而是对现有技术的综合利用。 本质是在HTTP协议的基础上以异步的方式与服务器进行通信。
异步
指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步
其优势在于不阻塞程序的执行,从而提升整体执行效率。
XMLHttpRequest可以以异步方式的处理程序。
XMLHttpRequest
浏览器内建对象,用于在后台与服务器通信(交换数据) , 由此我们便可实现对网页的部分更新,而不是刷新整个页面。
js 内置的 http 请求对象 XMLHttpRequest
XMLHttpRequest 请求
请求行
xhr.open('post','01.php');
请求头
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
get请求可以不设置
请求主体
xhr.send("name=xjj&age=10");
get可以传空 null
注意书写顺序
XMLHttpRequest 响应 知识点
HTTP响应是由服务端发出的
HTTP响应3个组成部分与XMLHttpRequest方法或属性的对应关系。
由于服务器做出响应需要时间(比如网速慢等原因),所以我们需要监听服务器响应的状态,然后才能进行处理。
onreadystatechange是Javascript的事件的一种,其意义在于监听XMLHttpRequest的状态
xhr.readyState 响应状态
0:请求未初始化(还没有调用 open())。
1:请求已经建立,但是还没有发送(还没有调用 send())。
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4:响应已完成;您可以获取并使用服务器的响应了。
响应成功获取信息
1、获取状态行 状态码 和 状态信息
xhr.status 状态码
xhr.statusText 状态码信息
2、获取响应头
xhr.getResponseHeader('Content-Type'); 传参获取部分信息
xhr.getAllResponseHeaders(); 获取响应头中的所有信息
3、获取响应主体
xhr.responseText 获取json格式的数据
xhr.responseXML 获取XML格式的数据
我们需要检测并判断响应头的MIME类型后确定使用request.responseText或者request.responseXML
API详解
xhr.open() 发起请求,可以是get、post方式,默认get
xhr.setRequestHeader() 设置请求头 get不用设置 post需要设置
xhr.send() 发送请求主体get方式使用xhr.send(null) post需要传数据 可以是json对象、带&的字符串,固定样式的数组
xhr.onreadystatechange = function () {} 监听响应状态
xhr.status表示响应码,如200
xhr.statusText表示响应信息,如OK
xhr.getAllResponseHeaders() 获取全部响应头信息
xhr.getResponseHeader('key') 获取指定头信息
xhr.responseText、xhr.responseXML都表示响应主体
get 和 post 请求方式的差异
1、GET没有请求主体,使用xhr.send(null)
2、GET可以通过在请求URL上添加请求参数
3、POST可以通过xhr.send('name=itcast&age=10')
4、POST需要设置
5、GET效率更好(应用多)
6、GET大小限制约4K,POST则没有限制
XML数据
1、必须有一个根元素
2、不可有空格、不可以数字或.开头、大小写敏感
3、不可交叉嵌套
4、属性双引号(浏览器自动修正成双引号了)
5、特殊符号要使用实体
6、注释和HTML一样
虽然可以描述和传输复杂数据,但是其解析过于复杂并且体积较大,所以实现开发已经很少使用了。
JSON
即 JavaScript Object Notation,另一种轻量级的文本数据交换格式,独立于语言。
数据结构的要求
1、数据在名称/值对中
2、数据由逗号分隔(最后一个健/值对不能带逗号)
3、花括号保存对象方括号保存数组
4、使用双引号
JSON数据在不同语言进行传输时,类型为字符串,不同的语言各自也都对应有解析方法,需要解析完成后才能读取
PHP解析方法
/*将php数组转化成json字符*/
$json_array = json_encode($array);
/*将json字符转化成php数组*/
$array_json = json_decode($json_array);
Javascript 解析方法
JSON对象 JSON.parse()、JSON.stringify();
JSON兼容处理json2.js
总结:JSON体积小、解析方便且高效,在实际开发成为首选。
/*需要把字符串转化成JSON对象*/
var json_obj = JSON.parse(text);
/*我们也可以把JSON对象转化成字符串*/
var json_str = JSON.stringify(json_obj);
兼容性
IE的兼容 需要加标识
9、封装ajax工具函数 参数对象思路
*1. 请求的类型 type get post
* 2. 请求地址 url
* 3. 是异步的还是同步的 async false true
* 4. 请求内容的格式 contentType
* 5. 传输的数据 data json对象
* 6.响应成功处理函数 success function
* 7.响应失败的处理函数 error function
10、jQuary的ajax方法
jQuery为我们提供了更强大的Ajax封装
$.ajax({}) 可配置方式发起Ajax请求
$.get() 以GET方式发起Ajax请求
$.post() 以POST方式发起Ajax请求
$('form').serialize() 序列化表单(即格式化key=val&key=val)
url 接口地址
type 请求方式
timeout 请求超时
dataType 服务器返回格式 json *jsonp等......
data 发送请求数据
beforeSend: function () {} 请求发起前调用
success 成功响应后调用
error 错误响应时调用
complete 响应完成时调用(包括成功和失败)
11、模板引擎
artTemplate 简介语法模板
<script src="dist/template.js"></script>
<script id="test" type="text/html">
<h1>{{title}}</h1>
<ul>
{{each list as value i}}
<li>索引 {{i + 1}} :{{value}}</li>
{{/each}}
</ul></script>
var data = {
title: '标签',
list: ['文艺', '博客', '摄影', '电影', '民谣', '旅行', '吉他']
};
var html = template('test', data);
document.getElementById('content').innerHTML = html;
artTemplate 原生 js 模板语法版
<script src="dist/template-native.js"></script>
<% 与 %> 符号包裹起来的语句则为模板的逻辑表达式。
模板不能访问全局对象 使用template.helper(name, callback) 然后在模板当中调用name()方法 声明一变量接受 就可以调用成员变量了
12 同源 & 跨域
同源
所谓同源是指,域名,协议,端口完全相同, 同源策略是浏览器的一种安全策略。
跨域
不同源则跨域
跨域方案
1、顶级域名相同的可以通过domain.name来解决,即同时设置 domain.name = 顶级域名(如example.com)
2、document.domain + iframe
3、window.name + iframe
4、location.hash + iframe
5、window.postMessage()
jsonp
JSON with Padding
其本质是利用了标签具有可跨域的特性, 由服务端返回一个预先定义好的Javascript函数的调用,并且将服务器数据以该函数参数的形式传递过来, 此方法需要前后端配合完成。
<script>
function fuc(data){
console.log(data.name);
}
</script>
<script src="http://www.guangzhou.com/api.php?callback=fuc"></script>

ajax知识整理的更多相关文章

  1. js事件(Event)知识整理

    事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下   鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...

  2. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  3. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  4. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  5. 数据库知识整理<一>

    关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数 ...

  6. 【转载】UML类图知识整理

    原文:UML类图知识整理 UML类图 UML,进阶必备专业技能,看不懂UML就会看不懂那些优秀的资料. 这里简单整理 类之间的关系 泛化关系(generalization) 泛化(generalize ...

  7. Linux进程管理知识整理

    Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...

  8. js事件(Event)知识整理[转]

    事件注册 平常我们绑定事件的时候用dom.onxxxx=function(){}的形式 这种方式是给元素的onxxxx属性赋值,只能绑定有一个处理句柄. 但很多时候我们需要绑定多个处理句柄到一个事件上 ...

  9. Spring Ioc知识整理

    Ioc知识整理(一): IoC (Inversion of Control) 控制反转. 1.bean的别名 我们每个bean元素都有一个id属性,用于唯一标识实例化的一个类,其实name属性也可用来 ...

随机推荐

  1. python笔记7:日期和时间

    Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示. 时间 ...

  2. 【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】

    一.需求分析 调查问卷中或许每一个单击动作都会引发大量的数据库访问,特别是在参与调查的过程中,只是单击“上一页”或者“下一页”的按钮就会引发大量的查询,必须对这种问题进行优化才行.使用缓存策略进行查询 ...

  3. Range Sum Query 2D - Immutable

    https://leetcode.com/problems/range-sum-query-2d-immutable/ 条件说sumRegion 会调很多次,如果每次都用双for 循环去累加的话就有太 ...

  4. AutoMapper实现自动CreapMap

    标题是个噱头,完全不写代码自动是不现实的,只是简化了CreateMap.方法也是很粗糙的,看看吧. 我想在使用AutoMapper的时候最恶心的一定是写了一个Profile,里边有n行 Mapper. ...

  5. Service and controller in angularJs

    Separation of concern is at the heart while designing an AngularJS application. Your controller must ...

  6. Java_新浪微博SDK_jar包下载

    新浪微博开放平台API_jar包下载地址:jar包(猛戳) --by HsuChan

  7. Simulink Memory vs Unit Delay

    Memoryブロック.Unit Delayブロック共に前回の入力値を出力しますが.動作するタイミングが異なります. ●Memoryブロック シミュレーションの各時刻(ステップ)で動作し.「1ステップ」 ...

  8. SpringMvc相关配置的作用

    1. <!-- 配置 handlerAdapter--> <bean class="org.springframework.web.servlet.mvc.SimpleCo ...

  9. bzoj4491奇技淫巧线段树

    20行的归并+10行的线段树(现在线段树真是越写越短了)+10行主程序(连主程序都缩过行)  = =丧心病狂 struct里连开10个,用大括号直接初始化真是爽翻了 #include <cstd ...

  10. 【BFS】HDU 1495

    直达–> HDU 1495 非常可乐 相似题联动–>POJ 3414 Pots 题意:中文题,不解释. 思路:三个杯子倒来倒去,最后能让其中两个平分即可.可能性六种.判定的时候注意第三个杯 ...