背景:业务需求是,一个前端(手机和浏览器)HTML页面中有图片,按钮......,需要统计用户点击图片或者按钮的次数。

前端实现:通过一个js来统计HTML页面中所有的图片和按钮对象,并给每个对象赋予一个监听事件,这样当用户点击图片或按钮,就能监听到该事件,并行后台发送一个请求。

var xhr;//创建httpRequest对象
if (window.XMLHttpRequest) { //兼容处理
xhr = new XMLHttpRequest();
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
var url = "http://172.16.11.107:8700/tfcarepoint/send2";
var sendData = function(data, url2, callBackFun) {
xhr.open("post", url2, true); //打开连接
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); //设置请求头
xhr.send(JSON.stringify({ //设置请求体,并发送请求
"id" : location.href.slice(location.href.lastIndexOf("/") + 1,location.href.lastIndexOf(".")),
//"id" : "123",
"title" : document.title,
"type" : data,
"uuId" : uuid,
"userId" : userId,
"extInfo" : extInfo
}));
// 回调接口
xhr.onreadystatechange = function() { //设置回调事件
if (xhr.readyState == 4) {// 4 = "loaded"
if (xhr.status == 200) {// 200 = OK
if (callBackFun) {
callBackFun();
}
}
}
};
}; var pviews = "http://172.16.11.107:8700/tfcarepoint/pviews";
(function() {
sendData("enter",url); //当页面进入发送有个enter类型的请求
sendData("enter", pviews, function() {
alert("当前阅读量为:" + xhr.response);
var readNum = document.getElementById("readNum");
if (readNum) {
readNumss.textContent = xhr.response;
}
});
})();
var isMobile = /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)
|| /(Android)/i.test(navigator.userAgent); //获取手机类型
var imgs = document.querySelectorAll("img"); //获取页面中所有的图片
if (imgs) {
imgs.forEach(function(val, idx, arr) { //遍历所有的图片对象(img标签),并给每个对象赋予以一个监听事件
var params = val.title ? val.title : "第" + (Number(idx) + 1) + "张图片";
if (isMobile) {
val.addEventListener("touchstart", function() { //手机添加触摸事件
sendData("imgs",url); //向后台发送imgs类型的请求
});
} else {
val.addEventListener("mousedown", function() {
sendData(params,url);
});
}
})
}
var thisPage = false;
window.onbeforeunload = function checkLeave(e) {
var evt = e ? e : (window.event ? window.event : null);
if (!thisPage) {
sendData("页面关闭");
}
};

一:Ajax (Asynchronous JavaScript And XML)

  Ajax描述了一种使用JavaScript脚本操纵HTTP的web应用框架,它与web服务器进行数据交换,并且不会导致页面加载。

二:XMLHttpRequest对象

  浏览器在XMLHttpRequest类上定义了HTTP的API,即实现了ajax技术

2.1 使用XMLHttpRequest对象(注意请求顺序不能乱)

步骤1   创建XMLHttpRequest对象实例  var request  =  new XMLHttpRequest();

步骤2   指定请求   request.open("method","url","true")

步骤3   设置请求头   request.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');

步骤4   发起请求     request.send();

备注1:

  同一个XMLHttpRequest对象可以重用,但必须一个请求完成(即这个对象获取到服务器相应)之后才能重新调用send()方法。否则上一个请求会被浏览器cancle掉。

备注2: 一个HTTP请求有4部分组成

* HTTP请求的方法或动作

 * 请求的地址 URL

* 一个可选的请求头集合

* 一个可选的请求体

备注3:一个HTTP响应包含3部分

 * 一个数字和文字组成的状态码

 * 一个响应头集合

* 响应主体

三:XMLHttpRequest对象使用实例

3.1 获取响应 ()

1)获取响应码:  status和statusText

2)  获取响应头:getResponseHeader() 和 getAllResponseHeaders(),XMLHttpRequest会自动处理cookie

3)获取响应主体: responseText或responseXML

js对象之XMLHttpReques对象学习的更多相关文章

  1. js的常用方法和对象学习

    js的常用方法和对象学习String对象:操作字符的. 使用:字符串.函数名. 大小写转换: toUpperCase() 转换大写 toLowerCase() 转换小写 function testSt ...

  2. JS入门之ActiveXObject对象(转载)

    JS入门之ActiveXObject对象   此对象提供自动化对象的接口.   function ActiveXObject(ProgID : String [, location : String] ...

  3. 聊聊传统oo和js的某些对比——对象/函数/new关键字等

    自己的学习记录,写的短点可以以后短时间内理清一些疑惑,看前要求你至少了解js中关于原型链等基本概念,因为文章直接以总结的形式理出知识点,没有去解释一些基本的概念! 1.1.熟记两句话,预预热 1. 函 ...

  4. JS 中的 Window 对象

    窗口对象的属性和方法: 在js最外层写的function可以还可以理解为window对象的一个方法.定义的变量也可以称之为window对象的一个属性.例如:window.alert("--- ...

  5. js行内式遇到的一些问题 DOM对象和jq对象转换的问题

    这两天给后台页面做页面,我的工作比较简单,只需要写结构和样式就行了,写好之后,后端大哥用ajax重写页面加载数据,顺便给标签添加选中事件,做选中后变色的处理,但是却遇到一个问题,一直选不到触发事件这个 ...

  6. Jquery第一篇【介绍Jquery、回顾JavaScript代码、JS对象与JQ对象的区别】

    什么是Jquery? Jquey就是一款跨主流浏览器的JavaScript库,简化JavaScript对HTML操作 就是封装了JavaScript,能够简化我们写代码的一个JavaScript库 为 ...

  7. 56、jsのBOM对象与DOM对象

    javascript的Bom和Dom对象使我们学习的重点,这篇随笔可以重点阅读 一.BOM对象 1.window对象 所有浏览器都支持 window 对象.概念上讲.一个html文档对应一个windo ...

  8. [Javascript] js的类和对象

    类 graph LR 类-->构造函数 类-->prototype对象 类-->instanceof运算符 类-->constructor属性 类-->isPrototy ...

  9. 8、jsのBOM对象与DOM对象

    javascript的Bom和Dom对象使我们学习的重点,这篇随笔可以重点阅读 本篇导航: BOM对象 DOM对象 DOM Event(事件) 实例练习 一.BOM对象 1.window对象 所有浏览 ...

随机推荐

  1. 用c语言基本实现wc.exe功能

    网址:https://github.com/3216005214/wc.exe wc项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序,模仿 ...

  2. idea debug快捷键 快速查找类

    快速查找类或者文件比如xml .txt Ctrl + Shift + N 快速查找类 双击Shift 选中代码右移 Tab 选中代码左移 Shift + Tab 选中代码上下移 Shift + Alt ...

  3. Programming for Everyone !

    Hello Internet ! This blog is to store my algorithm practices. Since Evernote code blocks do not sho ...

  4. py3.0第四天 函数,生成器迭代器等

    1.列表生成式,迭代器&生成器 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 > ...

  5. 2019.03.25 bzoj4567: [Scoi2016]背单词(trie+贪心)

    传送门 题意: 给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x): 1.排在s后面的字符串有s的后缀,则代价为n^2: 2.排在s前面的字符串有s的后缀,且没有排在s ...

  6. Nexus安装、使用说明、问题总结

    Nexus安装.使用说明.问题总结 1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在 ...

  7. cosfuture logs

    1,RESTClient用于调试接口的插件 2, PHP_AUTH_USER如何发送 $a = base64_encode("username:password"); 注意中间是冒 ...

  8. String工具类

    String工具类 问题描述 MAVEN依赖 代码成果 问题描述 很多时候我们需要对字符串进行很多固定的操作,而这些操作在JDK/JRE中又没有预置,于是我们想到了apache-commons组件,但 ...

  9. golang使用 gzip压缩

    golang使用 gzip压缩 这个例子中使用gzip压缩格式,标准库还支持zlib, bz2, flate, lzw 压缩处理_三步: 1.创建压缩文件2.gzip write包装3.写入数据 ou ...

  10. bootstrap-datepicker简单使用

    粗略整理,可能存在其他的方式请大家多多指教 选择年份 html <div class="dropdown"> <label class="search- ...