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请求参数注意点的更多相关文章

  1. php合并数组并保留键值的方法

    答案:使用 + 连接两个数组,替换array_merge()函数. php合并数组,一般会使用array_merge方法. array_merge — 合并一个或多个数组 array array_me ...

  2. 实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)

    实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种:array_multisort()函数对多个数组或多维数组进行排序.    //对数组$ ...

  3. js变量作为数组对象的键值方法

    js变量作为数组对象的键值方法,变量键值获取数组值 js也可以像php的数组一样用下标获取数组的值,方法是: var arr = {'key':'abc'}; var key = 'key'; con ...

  4. PHP编程实现多维数组按照某个键值排序的方法

    1.array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array(  array('1501'=&g ...

  5. PHP如何根据数组中的键值进行排序

    主要是使用PHP的排序函数,asort()和arsort(). 为了减少代码的耦合性,我们将根据数组中的键值进行排序封装成一个函数 <?php $array = array( array(), ...

  6. 通过程序修改注册表键值来达到修改IE配置参数的目的

    通过程序修改注册表键值来达到修改IE配置参数的目的 使用IE访问应用程序或网页时经常需要设置一些选项(工具-Internet 选项),比如为了避免缓存网页,把工具-Internet选项-常规选项卡-I ...

  7. php 二位数组按某个键值排序

    $arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...

  8. JAVA 数组作为方法返回值—返回地址

    package Code411;/*一个方法可以有0,1,多个 参数,但只能有0和1个返回值希望一个方法产生多个结果数据进行返回 数组作为方法的参数,传递进去的是数组的地址值. */public cl ...

  9. 二维数组按某个键值排序 FOR PHP

    $arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...

随机推荐

  1. ORA-01555错误总结(二)

    这篇文章紧接着上一篇"ORA-01555错误总结(一)".主要描写叙述延迟块清除导致的ORA-01555错误. 以下是一些简介(上一遍已经介绍过) ORA-01555错误是一种在o ...

  2. How to search Installed Updates

    Windows本身的控制面板中自带的搜索,无法根据补丁编号进行搜索 可以将补丁信息导出到文本,再用文本编辑器进行查找 https://www.concurrency.com/blog/w/search ...

  3. legend---四、菜鸟教程css3里面有教你炫酷的按钮怎么做

    legend---四.菜鸟教程css3里面有教你炫酷的按钮怎么做 一.总结 一句话总结:想学,总是有很多资料的 1. 自动居中是 margin:100px 0px;么? 自动居中是margin:100 ...

  4. thinkphp5内置标签

    thinkphp5内置标签 知道内置标签怎么用,查手册的时候好查 却功能的时候在里面找着来用 内置标签一览 内置标签 变量输出使用普通标签就足够了,但是要完成其他的控制.循环和判断功能,就需要借助模板 ...

  5. BZOJ 3262 cdq分治 OR 树套树

    注意判断 三个条件都一样的-- (CDQ分治 其实并不是很难理解 只是想不到--) CDQ分治: //By SiriusRen #include <cstdio> #include < ...

  6. [Chromium文档转载,第007章]JNI on Chromium for Android

    Overview JNI (Java Native Interface) is the mechanism that enables Java code to call native function ...

  7. python 多线程探索

    前面已经了解过了,python多线程效率较低的主要原因是存在GIL,即Global Interpreter Lock(全局解释器锁).这里继续详细的看下GIL的说明与如何避免GIL的影响,从而提高py ...

  8. 运输层协议——UDP

    UDP概述: UDP只是做了运输层协议能做的最少工作,仅做了复用/分解,少量的差错检验. UDP是无连接的. UDP优点: 关于何时.发送什么数据的应用层控制更为精细:TCP在拥堵时会遏制发送方的发送 ...

  9. 洛谷 P1877 [HAOI2012]音量调节

    P1877 [HAOI2012]音量调节 题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面 ...

  10. OcadeToolkit - From 2D CAD to PDMS

    OcadeToolkit - From 2D CAD to PDMS eryar@163.com Abstract. 基于开源二维CAD软件QCAD开发的插件可以将DXF文件中直线.圆弧转换到PDMS ...