Ajax 是对Asynchronous JavaScript +XML的简写。 这一技术能够像服务器请求额外的数据而无须卸载页面,会带来更换的用户体验。
post请求 使用频率仅次于GET的是POST请求,通常用于向服务器发送应该被保存的数据。POST请求应该把数据作为请求的主体提交,而GET请求传统上不是这样。POST请求的主体可以包含非常多的数据,而且格式不限。在open()方法第一个参数的位置传入”post“,就可以初始化法一个POST请求,如下面的例子所示。 xhr.open("post","example.php",true); 发送POST请求的第二步就是向send()方法中传入某些数据。由于XHR最初的设计主要是为了处理XML,因此可以在此传入XML DOM文档,传入的文档经序列化之后将作为请求主体被提交到服务器。当然,也可以在此传入任何想发送到服务器的字符串 。 默认情况下,服务器对POST请求和提交Web表单的请求并不会一视同仁。因此,服务器必须有程序来读取发送过来的原始数据,并从中解析出有用的部分。不过,我们可以使用XHR来模仿表单提交:首先将Content-Type头部信息设置为application、x-www-form-urlencoded. 也就是表单提交时的内容类型,其次是以适当的格式去创建一个字符串。 第14章经讨论过,POST数据的格式与查询字符串格式相同,如果需要将页面中表单的数据进行序列化,然后再通过XHR发送到服务器,那么就可以使用第14章介绍的serialize()函数来创建这个字符串: function submitData(){ var xhr = createXHR(); xhr.onreadystatechange = function(){ if(xhr.readState == 4){ if((xhr.status >=200 && xhr.status < 300)||xhr.status == 304){ alert(xhr.responseText); }else{ alert("Request was unsuccessful:" + xhr.status); } } }; xhr.open("post","postexample.php",true); xhr.setRequestHeader("Content-Type",”application/x-www-form-urlencoded“); var form = document.getElementById("user-info"); xhr.send(serialize(form)); }
这个函数可以将ID为”user-info“的表单中的数据序列化之后发送给服务器。而下面的事例PHP文件postexample.php就可以通过$_post取得提交的数据了
如果不设置Content-Type头部信息,那么发送给服务器的数据就不会出现在HTTP_RAW_POST_DATA。 与GET请求相比,POST请求消耗的资源会更多一些。从性能角度来看,以发送相同的数据计,GET请求的速度最多可达到POST请求的两倍。