function ajax(params){

params = params||{};

if (!params.url) {

throw new Error('Necessary parameters are missing.'); //必要参数未填

}

var random = +new Date;

var hander = null;

var options = {

url: '', //接口地址

type: 'GET', //请求方式

timeout: 5000, //超时等待时间

cache: true, //缓存

async: true, //是否异步

xhrFields: {}, //设置XHR对象属性键值对。如果需要,可设置withCredentials为true的跨域请求。

dataType: 'json', //请求的数据类型

data: {}, //参数

jsonp: 'callback', //传递请求完成后的函数名

jsonpCallback: 'jsonp_' + random, //请求完成后的函数名

error: function() {}, //请求失败后调用

success: function(){}, //请求成功后调用

complete: function(){} //请求完成后调用

};

var formatParams = function(json) {

var arr = [];

for(var i in json) {

arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(json[i]));

}

return arr.join("&");

};

for(var i in params){

switch(i){

case 'type':

options[i] = params[i].toUpperCase();

break;

case 'dataType':

options[i] = params[i].toLowerCase();

break;

default:

options[i] = params[i];

}

}

if(typeof options.data =='object'){

options.data = formatParams(options.data);

}

if(options.dataType=='jsonp'){

options.cache = params.cache||false;

//插入动态脚本及回调函数

var $head = document.getElementsByTagName('head')[0];

var $script = document.createElement('script');

$head.appendChild($script);

window[options.jsonpCallback] = function (json) {

$head.removeChild($script);

window[options.jsonpCallback] = null;

hander && clearTimeout(hander);

options.success(json);

options.complete();

};

//发送请求

if(options.cache){

options.data += options.data?'&_'+random:'_'+random;

}

options.data += '&'+options.jsonp+'='+options.jsonpCallback;

$script.src = (options.url + '?' + options.data).replace('?&','?');

//超时处理

hander = setTimeout(function(){

$head.removeChild($script);

window[options.jsonpCallback] = null;

options.error();

options.complete();

}, options.timeout);

}else{

if(options.cache){

options.data += options.data?'&_'+random:'_'+random;

}

//创建xhr对象

var xhr = new (self.XMLHttpRequest||ActiveXObject)("Microsoft.XMLHTTP");

if(!xhr){

return false;

}

//发送请求

if (options.type == 'POST') {

xhr.open(options.type, options.url, options.async);

xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');

}else{

options.url += options.url.indexOf('?')>-1?'&'+options.data:'?'+options.data;

xhr.open(options.type, options.url, options.async);

options.data = null;

}

if(options.xhrFields){

for(var field in options.xhrFields){

xhr[field]= options.xhrFields[field];

}

}

xhr.send(options.data);

//超时处理

var requestDone = false;

hander = setTimeout(function() {

requestDone = true;

if(xhr.readyState != 4){

xhr.abort();

options.error();

}

options.complete();

}, options.timeout);

//状态处理

xhr.onreadystatechange = function(){

if(xhr.readyState == 4&&!requestDone) {

if(xhr.status>=200 && xhr.status<300||xhr.status == 304) {

var data = options.dataType == "xml" ? xhr.responseXML : xhr.responseText;

if (options.dataType == "json") {

try{

data = JSON.parse(data);

}catch(e){

data = eval('(' + data + ')');

}

}

options.success(data);

} else {

options.error();

}

hander && clearTimeout(hander);

options.complete();

}

};

}

}

ajax({

'url':'https://api.ip138.com/ip/',

'data':{ //默认自动添加callback参数

'ip':'8.8.8.8', //为空即为当前iP地址

'oid':'35553',

'mid':'2',

'token':'00d5cb1fac5dc5cbfe2ff218292a2dfd33' //不安全,请定期刷新token,建议进行文件压缩

},

'dataType':'jsonp',

'success':function(json){

console.log(json);

}

});

java调用ip138接口查询ip地址,iP查询接口Javascript代码示例 iP地址查询接口Javascript代码示例 iP138查询网...相关推荐

  1. 二、JAVA调用海康威视SDK实现摄像头预览完整版

    接上一章:一.JAVA调用海康威视SDK实现摄像头预览 添加摄像头信息输入框 添加视频控制按钮 添加截图功能 代码: PreView.java package com.kx.hcws;import j ...

  2. java 调用postgresql 函数_从Java调用PostgreSQL中的存储过程

    我编写了一个我想用Java调用的存储过程.但我不认为它能够对我通过的查询做任何事情.以下是我的java代码: String QUERY_LOCATION = "select (license ...

  3. Java调用JS,JS调用JAVA

    JAVA 调用 JS //Java端 //带参数的函数调用 final String exes = "cc.Global.setEcADVal('"+ var1 + "' ...

  4. php新浪获取ip接口,【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地...

    [php]利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地 本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地 ...

  5. 第二篇:java调用公共数据接口:上海市车辆基本信息查询(java调用soap接口)

    java调用公共数据接口:上海市数据公共开放平台 前言 一.找个接口作为案例 二.查看文档 1.查看接口文档 2.确认接口地址与参数 三.编码(找代码直接跳这里!) 1.先创建一个返回数据的实体类 2 ...

  6. 【Java网络编程】获得实验室局域网中所有开机主机名称和IP地址,InetAddress类,在java中如何获取IP地址的方法

    获得实验室所有主机的IP地址和主机名 一.InetAddress类 二.获得指定IP地址和主机名的主要方法以及练习 1.主要方法 2.源码 三.获得实验室局域网中所有开机主机名称和IP地址 1.源码 ...

  7. 第一篇:java调用公共数据接口:QQ在线状态查询(java调用http接口)

    java调用公共数据接口: webxml 前言 一.以webxml上的一个接口为案例 二.查看接口文档 1.查看支持的调用方式 2.确认接口地址与参数 三.编码(找代码直接跳这里!) 1.配置Rest ...

  8. 公用ip地址查询_是什么使您无法更改公用IP地址并在Internet上造成严重破坏?

    公用ip地址查询 What exactly is preventing you (or anyone else) from changing their IP address and causing ...

  9. linux 循环执行ip停止服务,java调用远程服务器的shell脚本以及停止的方法实现

    最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手.考虑再三,有两种实现方式: 方案一:脚本所在服务器安装一个客户端,也就是自己写的一个小程序,本地通过端 ...

  10. 怎么用java调用快递接口查询和寄件等功能java-demo

    快递100快递物流查询.寄件等功能java-demo 快递100API内支持很多的快递功能,能够满足大家的需求,我们还可以自定义选择快递接口,支持多家快递公司,顺丰.京东.EMS.邮政.百世.圆通.韵 ...

最新文章

  1. memcpy()内存拷贝和赋值操作效率测试
  2. 工程师忽略的隐形成本
  3. 服务发现框架选型,Consul还是Zookeeper还是etcd
  4. 如何在ABAP ALV中具体的控制每个格子中的编辑属性
  5. 类选择器与ID选择器的比较
  6. 汇编中call printf参数压栈时错误理解
  7. php times33,PHP Hash算法:Times33算法代码实例
  8. 美一好创始人驾驶蔚来ES8启用自动驾驶后发生交通事故不幸逝世
  9. 职业教育计算机专业宣传,对中等职业教育中计算机专业教育的思考
  10. 记录几个视频处理软件
  11. 4月27日—5月1日三年级课程
  12. 学计算机要选什么科,新高考省份想学计算机专业怎么选科
  13. 电商平台二清该怎样合规?
  14. Mac下转换文件编码格式
  15. MOSFET开通特性(2)——动态特性
  16. 第四周.直播.03.论文带读+GAT
  17. boot.scr生成
  18. 【前端22_混合开发】介绍、初步认识MUI、UI组件、窗口管理
  19. 如何用计算机制作探测器,自制自制金属探测器
  20. 西湖大学张岳老师NLP课程大纲

热门文章

  1. OpenAI:基于对比学习的无监督预训练
  2. excel高级筛选怎么用_Excel筛选功能这样用,再多数据我也不惧了
  3. 清除node本地缓存
  4. FinClip黑客马拉松来袭,共同探索小程序边界
  5. 最全的关于硬件测试的解读
  6. 朋友圈爱心拼图php源码_朋友圈爱心形配图怎么弄 微信朋友圈九宫格心形拼图教程方法...
  7. 程序员幽默:39个奇葩代码注释,每一个都能笑抽
  8. 帮蔡徐坤刷出一亿转发,APP开发者一审获刑
  9. 腾达路由器电信宽带服务器无响应,腾达路由器连接上但上不了网怎么办 腾达路由器上不了网原因及解决办法【图文】...
  10. 手机怎么设置腾达路由器后显示远端服务器,怎么用手机设置腾达路由器