AJAX - 封装AJAX GET 数组join( )方法 键值对取value POST请求参数注意点
function objToStr(obj){
obj.t = new Date().getTime(); // 给obj动态增加了一个属性
// 这个给对象添加属性的方法, 会被直接加到键值对里??
/*
{
"userName":"lnj",
"userPwd":"123456",
"t":"38439034204" // 随机的时间数值
}
*/
var res = [];
for(var key in obj){
res.push(encodeURIComponent(key)+"="+encodeURIComponent(obj[key]));
// 注意这里键值对取值的方式
// encodeURIComponent(); 把中文转码,因为URL里不能出现中文
// URL中只能出现 字母/数字/下划线/ASCII码
}
return res.join("&"); // 数组的join方法要看一下!!
}
function ajax(url, obj, timeout, success, error){
// 0. 将对象转换为字符串
var str = objToStr(obj); // 函数的返回值即为这个字符串str
// 1. 创建异步对象
var xmlHttp, timer;
if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}else{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
/* 2. 设置请求方式和请求地址 open(method,url,async)
method: 请求的类型 GET 或 POST
url: 文件在服务器上的位置
async: true(异步) false(同步)
*/
xmlHttp.open("GET", url+"?"+str, true);
// 3. 发送请求
xmlHttp.send();
// 4. 监听状态的变化
xmlHttp.onreadystatechange = function(ev2){
/*
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4:请求已完成,且相应已就绪
*/
if(xmlHttp.readyState === 4){
//判断是否请求成功
clearInterval(timer); // 这里有点疑问,readyState状态为4,即清除定时器?
if(xmlHttp.status >= 200 && xmlHttp.status < 300 || xmlHttp.status === 304){
// 5. 处理返回的结果
success(xmlHttp);
}else{
error(xmlHttp);
}
}
}
// 判断外界是否传入了超时时间
if(timeout){
timer = setInterval(() => {
xmlHttp.abort(); // abort(); 中止XMLHttpRequest对象的请求
clearInterval(timer);
}, timeout);
}
}
<script src="myAjax.js"></script>
<script>
window.onload = function(ev){
var oBtn = document.querySelector('button');
//var res = encodeURIComponent('张三'); oBtn.onclick = function(ev1){ ajax('04-ajax-get.php', {
"userName":"lnj",
"userPwd":"123456"
}, 3000, // 设置服务器响应超时时间,到时间还没返回结果,就中止这次请求
function(xhr){
alert(xhr.responseText); }, function(xhr){
alert('请求失败');
})
}
}
</script>
xhr.open("POST", "04-ajax-get.php", true);
// POST 的 URL后面 不能直接拼接参数, 只能通过以下方式:
// 注意点:以下代码必须放到open和send之间
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("userName=zs&userPwd=123"); // POST请求的参数
AJAX - 封装AJAX GET 数组join( )方法 键值对取value POST请求参数注意点的更多相关文章
- php合并数组并保留键值的方法
答案:使用 + 连接两个数组,替换array_merge()函数. php合并数组,一般会使用array_merge方法. array_merge — 合并一个或多个数组 array array_me ...
- 实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)
实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种:array_multisort()函数对多个数组或多维数组进行排序. //对数组$ ...
- js变量作为数组对象的键值方法
js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...
- PHP编程实现多维数组按照某个键值排序的方法
1.array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array( array('1501'=&g ...
- PHP如何根据数组中的键值进行排序
主要是使用PHP的排序函数,asort()和arsort(). 为了减少代码的耦合性,我们将根据数组中的键值进行排序封装成一个函数 <?php $array = array( array(), ...
- 通过程序修改注册表键值来达到修改IE配置参数的目的
通过程序修改注册表键值来达到修改IE配置参数的目的 使用IE访问应用程序或网页时经常需要设置一些选项(工具-Internet 选项),比如为了避免缓存网页,把工具-Internet选项-常规选项卡-I ...
- php 二位数组按某个键值排序
$arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...
- JAVA 数组作为方法返回值—返回地址
package Code411;/*一个方法可以有0,1,多个 参数,但只能有0和1个返回值希望一个方法产生多个结果数据进行返回 数组作为方法的参数,传递进去的是数组的地址值. */public cl ...
- 二维数组按某个键值排序 FOR PHP
$arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...
随机推荐
- Thumb指令集与ARM指令集的差别
Thumb指令集 Thumb指令能够看做是ARM指令压缩形式的子集.是针对代码密度[1]的问题而提出的.它具有16为的代码密度.Thumb不是一个完整的体系结构,不能指望处理程序仅仅 ...
- Mesh BRep Shapes
Mesh BRep Shapes eryar@163.com Abstract. 当对OpenCASCADE的BRep表示法的数据结构有了一定的理解后,建议可以自己实现一个显示数据生成的功能,即网格剖 ...
- Cocos2d-x学习笔记(十四)CCAutoreleasePool具体解释
原创文章,转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38964637 前言 之前学了那么多的内容.差点儿全部的控件都要涉及内存 ...
- 2015合肥网络赛 HDU 5492 Find a path 动归
HDU 5492 Find a path 题意:给你一个矩阵求一个路径使得 最小. 思路: 方法一:数据特别小,直接枚举权值和(n + m - 1) * aver,更新答案. 方法二:用f[i][j] ...
- 《Linux企业应用案例精解》一书已由清华大学出版社出版
<Linux企业应用案例精解>简介 650) this.width=650;" border="0" alt="223754878.jpg" ...
- Linq中where查询
Linq的Where操作包括3种形式:简单形式.关系条件形式.First()形式. 1.简单形式: 例:使用where查询在北京的客户 var q = from c in db.Customers ...
- 用json2.js 代替 json.js防止与jQuery的js冲突
用json2.js 代替 json.js防止与jQuery的js冲突 1 s.toJSONString json.js:259 2 Object.toJSONString json.js:158 3 ...
- datatable设置成中文
$('#datatable').DataTable({ language: { "sProcessing": "处理中...", "sLengthMe ...
- 00076_BigDecimal
1.在程序中执行下列代码,会出现什么问题? System.out.println(0.09 + 0.01); System.out.println(1.0 - 0.32); System.out.pr ...
- Top 22 Free Responsive HTML5 Admin & Dashboard Templates 2018
Top 22 Free Responsive HTML5 Admin & Dashboard Templates 2018 May 18, 2018 Alex Ivanovs Website ...