jsonp和ajax对比,ajax的json和jsonp

;function ajax(params) {

params = params || {};

params.data = params.data || {};

// 判断是ajax请求还是jsonp请求

var json = params.jsonp? jsonp(params) : json(params);

function formatParams(data) {

var arr = [];

for (var name in data) {

// encodeURIComponent()

arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));

};

// 添加一个随机数参数 防止缓存

arr.push('v='+random());

return arr.join('&');

}

function json(params) {

params.type = (params.type || 'GET').toUpperCase();

params.data = formatParams(params.data);

var xhr = null;

if(window.XMLHttpRequest) {

xhr = new XMLHttpRequest();

} else {

xhr = new ActiveXObject('Microsoft.XMLHTTP');

};

xhr.onreadystatechange = function() {

/*

* 0:为初始化。尚未调用open()方法。

* 1:启动。已经调用open()方法。但尚未调用send()方法。

* 2:发送。已经调用send()方法。但尚未接受到响应。

* 3:接受。已经接收到部分响应数据。

* 4:完成。已经接收到全部响应数据,并且可以在客户端使用。

*/

if(xhr.readyState == 4) {

var status = xhr.status;

if (status >= 200 && status < 300) {

var response = "";

var type = xhr.getResponseHeader('Content-type');

if (type.indexOf('xml') !== -1 && xhr.responseXML) {

response = xhr.responseXML; // document对象响应

} else if (type === 'application/json') {

response = JSON.parse(xhr.responseText);

} else {

response = xhr.responseText; // 字符串响应

}

}

params.success && params.success(response);

} else {

params.error && params.error(status);

}

};

};

function jsonp(params) {

var callbackName = params.jsonp;

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

// 设置传递给后台的回调参数名

params.data['callback'] = callbackName;

var data = formatParams(params.data);

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

head.appendChild(script);

// 创建jsonp回调函数

window[callbackName] = function (json) {

head.removeChild(script);

clearTimeout(script.timer);

window[callbackName] = null;

params.success && params.success(json);

};

script.src = params.url + '?' + data;

if(params.time) {

script.timer = setTimeout(function(){

window[callbackName] = null;

head.removeChild(script);

params.error && params.error({

message: '超时'

});

}, time);

}

};

if (params.type == 'GET') {

xhr.open(params.type, params.url + '?' + params.data, true);

xhr.send(null);

} else {

xhr.open(params.type, params.url, true);

// 设置提交时的内容类型

xhr.setRequestHeader('Content-type', 'application/x-ww-form-urlencoded; charset=UTF-8');

xhr.send(params.data);

}

}

ajax({

url: 'text.php',

type: 'POST',

data: {'b': '异步请求'},

success: function(res){

console.log(JSON.parse(res));

}

error: function(error){}

});

ajax({

url: 'test', // 请求地址

jsonp: 'jsonpCallback', // 采用jsonp请求,且回调函数名为"jsonpCallbak",可以设置为合法的字符串

data: {'b': '异步请求'}, // 传输数据

success:function(res){ // 请求成功的回调函数

console.log(res);

},

error: function(error) {} // 请求失败的回调函数

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值