例18-14:
//使用script元素发送jsonp请求
//根据指定的url发送一个jsonp请求
//把解析到的响应数据传递给回调函数
//在url中添加一个名为jsonp的查询参数,用于指定该请求的回调函数的名称
function getJSONP(url,callback){
//为本次请求创建一个唯一的回调函数名称
var cbnum="cb"+getJSONP.counter++;
var cbname="getJSONP."+cbnum;
//将回调函数名称以表单编码的形式添加到url的查询部分
//使用jsonp作为参数名,支持jsonp的服务能分辨出这个参数名
//设置url的查询部分
if(url.indexOf("?") == -1){
url+="?jsonp="+cbname;
}else{
url+="&jsonp="+cbname;
}
//创建script元素用于发送请求
var script=document.createElement("script");
//定义将被脚本执行的回调函数
getJSONP[cbnum]=function(respomse){
try{
callback(respomse);
}finally{
//删除该函数
delete getJSONP[cbnum];
//移除script元素
script.parentNode.removeChild(script);
}
};
//立即触发http请求
script.src=url;
document.body.appendChild(script);
}
getJSONP.counter=0;//用于创建唯一回调函数名称的计数器