代码改变世界

一个简单的jsonp

2014-05-04 14:15  海边拾贝壳的人  阅读(177)  评论(0编辑  收藏  举报

/**
url :请求的地址
json : 各种参数
callback:回调函数

**/


function jsonp(url,json,cbName,callBack){

//1.先弄一个随机数 用作服务端回调函数的名称
var cb = new Date().getTime()+Math.random();
cb = new String(cb).replace(".","");
json[cbName] = "cb_"+cb;
//把回调函数 预先定义好 方便服务端返回的函数调用
window[json[cbName]] = function(data){
//当调用回调函数的时候 把相关的资源清除掉 减少内存的占用
document.getElementsByTagName("head")[0].removeChild(oScript);
window[json[cbName]] = null;
callBack && callBack(data);
}
//2 拼接服务端地址 url
var tempUrl = json2Url(json);
var url = url + "?" + tempUrl;
//3.创建script 标签
var oScript = document.createElement("script");
oScript.src = url;
oScript.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(oScript);
}

/**
把json 转成相应的url

**/
function json2Url(json){
var arr = [];
var index = 0;
for(var i in json){
arr[index] = i+"="+json[i];
index++;
}
return arr.join("&");
}

 

遇到的两个问题  1.jquery getJSON 方法是 callback 后不加 问号的话  就会报 不允许跨域访问

                      2.回调函数为数字时  客户端调用不了