使用原生ajax发送post请求完整案例

使用ajax发送数据实现前后台的交互,我想是web开发最基础的技能了。近来dz开发因为不兼容jquery,所以只能使用原生js发送数据,不想还遇到很多问题。在这里分析总结一下。先来一个使用ajax发送post表单数据的案例。

<html>
<head>
<title>
ajax发送post请求实例
</title>
</head>
<body>
<form method="post" action="index.php" name="userinfo">
姓名:<input type="text" name="username" />
学校:<input type="text" name="school"/>
个人简介:<textarea name="selfinfo"></textarea>
<a href="javascript:;" onclick="ajaxpost()">提交</a>
</form>
<script type="text/javascript">
function ajaxpost(){
var f = document.userinfo;
var uname = f.username.value;
var uschool = f.school.value;
var uinfo = f.selfinfo.value;
var xmlhttp

if (window.XMLHttpRequest){
	// code for IE7+, Firefox, Chrome, Opera, Safari
	xmlhttp=new XMLHttpRequest();
}else{
	// code for IE6, IE5
	xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
	if (xmlhttp.readyState==4 && xmlhttp.status==200){
		var obj = eval('('+xmlhttp.responseText+')');
		alert('姓名:'+obj.uname+'学校:'+obj.uschool+'个人简介:'+obj.uinfo);
    }
}
xmlhttp.open("post","index1.php",true);
/*
发送post请求是此句万万不能少
在Form元素的语法中,EncType表明提交数据的格式
用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。
application/x-www-form-urlencoded:窗体数据被编码为名称/值对。这是标准的编码格式。
multipart/form-data:窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。
text/plain:窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符
*/
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send('uname='+uname+'&uschool='+uschool+'&uinfo='+uinfo);
}
</script>
</body>
</html>

index1.php

<?php
if(!empty($_POST)){
	echo json_encode($_POST);
}

有几点要注意的

1:ajax不能跨域请求数据:当跨域时:如当前脚本域名为:locakhost/index.php,请求的url为127.0.0.1,则发送请求失败,或者服务器能收到请求,但是xmlhttp.status=0,浏览器接受不到服务器返回的数据。

何为跨域?跨域如何发送请求数据,这篇博客有很好的解释。

http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html#m0


2:当用for循环发送请求时,因为for循环速度远大于一次请求完成的速度,所以ajax只能收到最后一次请求的数据。

3:有关json,php函数json_encode()和json_decode()都只能接受ut8格式编码的字符串,否者返回null。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。