PHP之请求数据

2017-11-18

前面说过对于数据的处理有两种方式,一种是get,一种是post,这两种方式既可以提交数据又可以发送数据,所以不能以字面单词的意思认为get是获取数据,而post是发送数据,虽然刚学习php时我也这样以为,但事实不是这样,所以要分清楚两者的区别。

get和post的区别

  1. get方式提交数据的时候对于数据的保密性不太好,因为get方式提交数据的时候是通过url链接?后面的参数来提交给后台的,都可以直接在链接里看到,所以不太安全。
  2. 还有就是get数据有限制
  3. post相对而言安全一点,需要选择https协议
  4. post数据是在http请求头的主体部分发送的
  5. post数据理论上没有限制

数据提交方式:

1.通过url链接提交数据,利用url链接?后面的参数

"http://localhost/PHP/PHP2/lesson01.php?pic="+inp.value,所以可以在js的script标签中使用此语句,后面的参数定义一个变量可以把数据传过去,这种方式是get方式。

2.form表单方式提交

这种方式可以实现postget两种数据传送方式,可以跨域提交数据,使用iframe的方式实现局部刷新。但是iframe不支持跨域。

1
2
3
<form action="" method="post" enctype="enctype="multipart/form-data"">
<input type="text" name="name">
</form>

所以上面的语句要想在后台获得input中的数据就在php中用$_POST['name']来获取,如果是get就用$_GET['name']

3.通过script标签的src属性

只能实现get方式
可以独立地实现局部刷新
支持跨域
json,json串JSON.parse()json串转换成json对象。
jsonp,一种跨域请求方式,向服务器请求的同时提供给后台一个回调函数名,服务器返回数据时将数据包裹在函数名中,一起返回,由于我们使用的是script标签,浏览器端一旦接收到返回数据,立即执行该函数。但是jsonp只支持get方式提交。

4.XHR小黄人对象

1
2
3
4
5
6
7
8
var xhr=new XMLHttpRequest();
xhr.onload=function(){//数据接收成功后的执行函数
var obj=JSON.parse(this.responseText);//返回的数据是json串,要把它转换成json对象
}
var formData=new FormData();//一种数据保存对象,可以跟xhr结合使用,注意格式。
formData.append("name","zhouzhou");
xhr.open("get/post","url",true);//第一个参数是表明用哪种方式获取数据,第二个参数是要获取数据的后台链接,第三个参数是同步还是异步执行。`true`异步,默认。`false`同步。
xhr.send(formData);//获取数据可以不填,如果要发送数据就把要把发送的数据添加到括号里。

关于xhr的属性,readyState,即XHR的执行状态,0--初始状态1--创建链接2--发送数据3--服务器开始返回数据4--数据接收完毕
关于xhr的事件,onreadyStateChange()当小黄人状态发生变化的时候会执行。onload()接收数据完毕之后才执行。

5.$ajax封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$,ajax({
type:"get",//接收数据的方式,和前面提过的一样
url:"test.php",//索取数据的后台链接地址
dataType:"json",//返回的数据类型,默认是文本类型,如果是json,则严格要求后台按照json格式传送字符串
async:"true",//异步执行还是同步执行
data:{name:"zhouzhou",sex:"男"},//需要传送的数据,注意格式,键值对的形式
success:function(data){//数据请求成功后的回调函数,此时的返回数据已经被转换完json对象了,被封装好了,可以直接用。
}
});
//load()函数
//直接将请求接口添加到引用元素上,比如有一个id为show的div,另外有一个子页面nav.html,$("$show").load(nav.html);就可以把nav.html的内容加载在show div中。
//$.get("url",{},function(data,status){},"json"/可以省略);
//$.post();与$.get();参数一样,但是提交方式是post.

以上就是所有的数据提交和数据获取方式,是前后台交互的关键所在。