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. Android实战简易教程-第二十六枪(基于ViewPager实现微信页面切换效果)

    1.头部布局文件top.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  2. 11.ng-init

    转自:https://www.cnblogs.com/best/tag/Angular/ 初始化 <p ng-init="test=1" ng-repeat="a ...

  3. TYVJ 1935 拆点网络流

    思路: 就是一个多重匹配 把每个防御塔拆成 拆成第j次 发射的导弹 跑个网络流 //By SiriusRen #include <cmath> #include <queue> ...

  4. XML获取节点信息值

    XmlDocument doc = new XmlDocument(); doc.LoadXml(sreturn); XmlNode xNode = doc.SelectSingleNode(&quo ...

  5. Alternating Sum

    http://codeforces.com/problemset/problem/963/A 不考虑正负的话,每两项之间之间公比为b/a,考虑正负,则把k段作为循环节,循环节育循环节之间公比为(b/a ...

  6. Windows10 Linux子系统的启用和中文用户名的修改

    一直用的虚拟机Linux,忽然心血来潮,看到Windows 10可以使用Linux子系统,于是来装一波,按照这位前辈的教程 https://blog.csdn.net/zhangdongren/art ...

  7. react入门安装

    react的入门安装 1.react的适用方法有两种,其一是依赖在线的cdn地址: https://reactjs.org/docs/cdn-links.html 官方给的cdn地址如下 <sc ...

  8. jQuery判断字符串是否含有中文字符

    //判断字符串是不是中文String.prototype.isChinese = function () {    var reg = /[^\x00-\xff]/ig;//判断是否存在中文和全角字符 ...

  9. 【CS Round #37 (Div. 2 only) D】Reconstruct Graph

    [Link]:https://csacademy.com/contest/round-37/task/reconstruct-graph/statement/ [Description] 给你一张图; ...

  10. PatentTips - Device virtualization and assignment of interconnect devices

    BACKGROUND Standard computer interconnects, particularly for personal computers or workstations, may ...