function jsonp(options) {
options = options || {};
if (!options.url || !options.callback) {
throw new Error("参数不合法");
}
// 创建 script 标签并加入到页面中
var callbackName = ('jsonpcallback_' + Math.random()).replace(".", ""); // 随机一个比较长的回调函数名称
var oHead = document.getElementsByTagName('head')[0];
options.data[options.callback] = callbackName; // 把回调函数名字加入到 options.data 中
var params = formatParams(options.data); // 格式化数据
var oS = document.createElement('script');
oHead.appendChild(oS);
// 创建jsonp回调函数
window[callbackName] = function (json) {
oHead.removeChild(oS);
clearTimeout(oS.timer);
window[callbackName] = null;
options.success && options.success(json);
};
// 发送请求
oS.src = options.url + '?' + params;
// 超时处理
if (options.time) {
oS.timer = setTimeout(function () {
window[callbackName] = null;
oHead.removeChild(oS);
options.error && options.error({ message: "超时" });
}, options.time);
}
}
function formatParams(data) {
var arr = [];
for (var name in data) {
arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
}
arr.push(("v=" + Math.random()).replace(".", ""));
return arr.join("&");
}
jsonp({
url: "http://www.XXX.com/",
callback: "callback", // callback 的名称要记住
time: 5000,
data: {
a: 1
},
success: function (data) {
console.log("提交成功!");
},
error: function (err) {
console.log(err);
}
});
options = options || {};
if (!options.url || !options.callback) {
throw new Error("参数不合法");
}
// 创建 script 标签并加入到页面中
var callbackName = ('jsonpcallback_' + Math.random()).replace(".", ""); // 随机一个比较长的回调函数名称
var oHead = document.getElementsByTagName('head')[0];
options.data[options.callback] = callbackName; // 把回调函数名字加入到 options.data 中
var params = formatParams(options.data); // 格式化数据
var oS = document.createElement('script');
oHead.appendChild(oS);
// 创建jsonp回调函数
window[callbackName] = function (json) {
oHead.removeChild(oS);
clearTimeout(oS.timer);
window[callbackName] = null;
options.success && options.success(json);
};
// 发送请求
oS.src = options.url + '?' + params;
// 超时处理
if (options.time) {
oS.timer = setTimeout(function () {
window[callbackName] = null;
oHead.removeChild(oS);
options.error && options.error({ message: "超时" });
}, options.time);
}
}
function formatParams(data) {
var arr = [];
for (var name in data) {
arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
}
arr.push(("v=" + Math.random()).replace(".", ""));
return arr.join("&");
}
jsonp({
url: "http://www.XXX.com/",
callback: "callback", // callback 的名称要记住
time: 5000,
data: {
a: 1
},
success: function (data) {
console.log("提交成功!");
},
error: function (err) {
console.log(err);
}
});