导航
script 标签就是用来解析脚本的,它只解析文件里的文本,是脚本就能解析
// js/index.txt
var a = 1;
<script src="js/index.txt"></script>
<script>
console.log(a); // 虽然引用的是 txt 文件,但仍然能打印1
</script>
script 脚本不看 jsonp.php 这个文件后缀名,只看这个引用脚本最终返回回来的是什么
如果不设置 jsonpCallback: 'test' ,返回的数据就是下面类似请求:
也就是jQuery内部给你每次ajax请求随机生成了一个callback函数名,后端看到 cb 后,就直接取用cb等于后边的这个随机函数名,调用即可。
var opt = opt || {},
type = (opt.type || 'GET').toUpperCase(),
async = "" + opt.async === 'false' ? false : true,
dataType = opt.dataType || 'JSON',
jsonp = opt.jsonp || 'cb',
jsonpCallback = opt.jsonpCallback || 'jQuery' + randomNum() + "_" + new Date().getTime(),
url = opt.url,
data = opt.data || null,
timeout = opt.timeout || 30000,
error = opt.error || function() {},
success = opt.success || function() {},
complete = opt.complete || function() {},
t = null;
if (dataType.toUpperCase() === 'JSONP' && type !== 'GET') {
throw new Error('如果dateType为JSONP,请你将type设置为GET');
}
if (dataType === 'JSONP') {
var oScript = document.createElement('script');
oScript.src = url.indexOf('?') === -1
? url + '?' + jsonp + '=' + jsonpCallback
: url + '&' + jsonp + '=' + jsonpCallback;
document.body.appendChild(oScript);
document.body.removeChild(oScript);
window[jsonpCallback] = function(data) {
success(data);
}
return;
}
function randomNum() {
var num = '';
for (var i = 0; i < 20; i++) {
num += Math.floor(Math.random() * 10);
}
return num;
}