javascript原生代码实现ajax请求
来源:互联网 发布:java开发培训费用 编辑:程序博客网 时间:2024/05/09 05:13
之前做的转盘抽奖中用到了ajax获取后台参数,于是把ajax相关的内容都学习了一下,之前做的是用jquery的ajax()函数来写的,为了能理解透彻,学习了如何用js原生代码实现ajax
Ajax的核心是XMLHttpRequest对象
1、创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
2、XHR的用法
(1) 调用open()方法,它接受三个参数(要发送请求的类型,请求的URL,表示是否异步发送请求的布尔值);调用open()并不会真正发送请求,只是启动一个请求以备发送;
(2) 调用send()方法,它接受一个参数,即要作为请求主体发送的数据。
服务器收到响应后,响应的数据会自动填充XHR对象的属性。相关属性有:
responseText:作为响应主体被返回的文本
responseXML:响应数据的XML DOM文档
status:响应的HTTP状态,200响应成功和304表示响应有效
statusText:HTTP状态的说明
XHR的readyState属性表示请求响应过程的当前活动阶段,只要readyState属性的值发生改变,就会触发一次readystatechange事件。readyState=4,表示响应完成,已经收到了全部响应数据,所以我们只对这个阶段感兴趣。在调用open()之前指定onreadystatechange,可以保证跨浏览器的兼容性。
var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if (xhr.readyState == 4){ if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ alert(xhr.responseText); } else { alert("Request was unsuccessful: " + xhr.status); } } };
请求方式有两种:GET和POST
GET请求是最常见的请求类型,用于向服务器查询某些信息;
POST请求用于向服务器发送应该被保存的数据。
我的html代码如下:
<form id="info" method="post"> <div class="br"> <lable>宝贝昵称:</lable> <input type="text" id="baby-name" name="baby-name"> <lable>联系电话:</lable> <input type="text" id="phone" name="phone"> </div> <div class="br"> <lable>照片描述:</lable> <input type="text" id="photo-content" name="photo-content"> </div> </form>
js代码:
/*序列化表单数据*/ function serialize(form){ var parts = new Array(); var field = null; for (var i=0, len=form.elements.length; i < len; i++){ field = form.elements[i]; parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value)); } return parts.join("&"); } /*xhr对象向服务器传数据*/ function submitData(){ var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if (xhr.readyState == 4){ if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){ alert(xhr.responseText); var data = JSON.parse(xhr.responseText); console.log(data); } else { alert("Request was unsuccessful: " + xhr.status); } } }; xhr.open("post", "db.jsp", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//使用XHR来模仿表单提交,加一个请求头部。 var form = document.getElementById("info"); xhr.send(serialize(form)); }
这是自己写的代码,本来这样已经可以了,先是写了一个表单序列化的函数,然后用XHR对象来实现ajax异步请求。在学习过程中,发现了FormData这个类,它为序列化表单以及创建于表单格式相同的数据提供了便利。使用方法如下:
var form = document.getElementById("info"); var data = new FormData(form); xhr.send(data);
但是我却遇到了问题,原因是我后台用的jsp代码,怎么都获取不到前端传过来的表单数据,查了一下发现,jsp的request.getParameter()只能 recognizes application/x-www-form-urlencoded requests only. 但是我发送了一个 multipart/form-data request.,解决方法如:这个页面写的挺清楚
- javascript原生代码实现ajax请求
- 原生JavaScript实现ajax异步请求代码
- 原生JavaScript实现Ajax请求
- 原生javascript实现ajax 发送post请求
- 原生javascript实现ajax异步请求
- 原生javascript Ajax异步请求代码小例子
- JavaScript发送原生ajax请求
- Javascript封装原生ajax请求
- 原生JavaScript实现AJAX
- 原生javaScript实现Ajax
- JavaScript实现原生ajax
- 原生AJAX实现异步请求
- 原生JS实现ajax请求
- 【JavaScript】-原生JavaScript实现Ajax
- 原生JavaScript实现AJAX、JSONP
- Ajax请求步骤,原生js代码
- Javascript实现Ajax请求
- 原生js使用xmlhttpRequest实现ajax请求
- Xcode6中如何使用自定义的类模板
- 企业在什么情况需要部署CRM系统?
- 你百度不到的android坑 imageview.setimageDrawable和setbackgroundDrawable
- CSS3鼠标滑过渐变颜色旋转图标特效
- [Android] ListView 滚回顶部
- javascript原生代码实现ajax请求
- 缓存
- readonly 与 disabled的区别(disabled提交后获取不到该值的解决方法)
- 经历 成长——致逝去的时光
- Android中View的滑动冲突——Android开发艺术探索笔记
- swift 学习笔记2 -- 单例
- Cloud Test 单页面即时监测功能上线!
- Shell字符串
- Linux下利用yum安装oracle11g(第一部分)