使用原生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。

时间: 2024-12-23 10:39:16

使用原生ajax发送post请求完整案例的相关文章

使用原生AJAX 发送异步请求实现 常用的用户登录效果

HTML部分 <!doctype html> <html> <head> <meta charset="UTF-8"> <title>...</title> <style type="text/css"> .modal{ position:fixed; left:0;top:0;bottom:0;right:0; background:rgba(0,0,0,.2); display:

Ajax发送post请求

//创建Ajax对象(兼容处理) function createXHR() { var xhr = null; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if(window.ActiveXObject) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } return xhr; } //发送post请求 function request(){ xhr.open('P

JavaScript之Ajax-2 Ajax(使用Ajax发送get请求、使用Ajax发送post请求)

一.使用Ajax发送get请求 发送异步请求的步骤 - 获取Ajax对象:获取 XMLHttpRequest对象实例 - 创建请求:调用XMLHTTPRequest对象的open方法 - 设置回调函数:为Ajax对象的 onreadystatechange事件设定响应函数 - 发送请求:调用Ajax对象的send方法 - 获取Ajax对象     - 创建请求 - 注意: - true:表示发送异步请求(当Ajax对象发送请求时,用户仍然可以对当前页面做其它的操作) - false:表示发送同步

AJAX的来龙去脉(由来)-如果被封装出来的--ajax发送异步请求(四步操作)

<黑马程序员_超全面的JavaWeb视频教程vedio\JavaWeb视频教程_day23_ajax> \JavaWeb视频教程_day23_ajax\day23ajax_avi\14.打包ajax生成小工具.avi;  有介绍: 个人理解:就是封装了 XMLHttpRequest 的请求方法:演变而成我们常用的 ajax: =====原始的请求方式: ajax发送异步请求(四步操作) 1. 第一步(得到XMLHttpRequest) * ajax其实只需要学习一个对象:XMLHttpRequ

Ajax发送GET请求

这里用一个实例演示Ajax发送get请求,实例具体要求为一个注册页面,当用户填写完用户名称时,该输入框失去焦点后会通过Ajax向后台发送验证信息,如果用户名不是admin则通过验证,否则不通过验证. 下面先看JSP页面具体信息: <form action="servlet/LoginServlet" method="post"> <table> <tr> <td>用户账号:</td> <td>&

IT兄弟连 JavaWeb教程 使用AJAX发送POST请求并获取响应

POST请求用于向服务器发送应该被保存的数据,因此POST请求天然比GET请求多需要一份需要被保存的数据.那么这些数据应该放在何处呢?毕竟,我们的open()方法接收的三个参数都没有合适的位置. 答案是需要发送的数据会作为send()方法的参数最终被发往服务器,该数据可以是任意大小,任意类型. 使用Ajax发送POST请求需要使用setRequestHeader()方法设置请求头,代码如下: function PostRequest(){ var xhr = null; if(window.XM

Ajax发送XML请求案例

如果请求参数较多,而且请求参数的结构关系复杂,则可以考虑发送XML请求.XML请求的实质还是POST请求,只是在发送请求的客户端页面将请求参数封装成XML字符串的形式,服务器端则负责解析该XML字符串.当然,服务器获取到XML字符串后,可借助于dom4j或JDOM等工具来解析. 程序清单:Ajax02request/xml/second.jsp 1 <%@ page contentType="text/html; charset=UTF-8" language="jav

使用Ajax发送异步请求的步骤

1.获取Ajax对象:获取XMLHttpRequest对象实例 function getXhr(){ var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest();//非IE浏览器 }else{ xhr = new ActiveXObject('Microsoft.XMLHttp');//IE浏览器 } return xhr; } 2.设置回调函数:为Ajax对象的readystatechange事件设定响应函数 xh

jquery中使用ajax发送post请求变成get请求

今天在进行js开发的过程中出现了一个奇怪的问题,就是使用ajax向后端发送post请求时,在浏览器network中查看response时,显示400 bad request 并且请求方式变成get,因为本人不专前端,所以甚是疑惑,百般寻找答案无果,已经排除不是jsonp 跨域请求(据说js中跨域只能进行get请求,如果是post请求会请求转化为get请求) 各种寻找后,看到一个极老的帖子,也是同样的问题,而且有一个网友也翻到了这个几年前的帖子,并且留了言,说是因为静态资源文件的url和后端服务u