N久前写的一个JSONP请求方法
2011-09-08 11:43
176 查看
function getJSON(url, params, callback, charset){
var w = window,
query = url.indexOf("?") == -1 ? "?" : "&",
head,
callback = isFunction(params) ? params : callback,
charset = charset || "utf-8"
function getTimeVer(){
return new Date().getTime();
}
function isFunction(obj){
return Object.prototype.toString.call(obj) === "[object Function]";
}
function load(url){
var script = document.createElement('script'),
done = false;
script.src = url;
script.async = true;
script.charset = charset;
script.onload = script.onreadystatechange = function() {
if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) {
done = true;
script.onload = script.onreadystatechange = null;
if ( script && script.parentNode ) {
script.parentNode.removeChild( script );
}
}
};
if ( !head ) {
head = document.getElementsByTagName('head')[0];
}
head.appendChild( script );
}
if(typeof params === "string"){
params = params || "";
query += "&";
}else{
params = params || {};
for (var key in params ) {
if ( params.hasOwnProperty(key) ) {
query += encodeURIComponent(key) + "=" + encodeURIComponent(params[key]) + "&";
}
}
}
var jsonVar = "jsonp" + getTimeVer();
w[jsonVar] = function(data){
callback.call(null, data);
try{
delete w[jsonVar];
}catch(e){
}
w[jsonVar] = null;
};
load(url + query + "callback=" + jsonVar);
}
document.getElementById("click").onclick = function(){
getJSON("http://www-0f3d8c090ce:8080/foundation/servlet/JsonCallBack", function(data){
alert(data.name);
});
};
var w = window,
query = url.indexOf("?") == -1 ? "?" : "&",
head,
callback = isFunction(params) ? params : callback,
charset = charset || "utf-8"
function getTimeVer(){
return new Date().getTime();
}
function isFunction(obj){
return Object.prototype.toString.call(obj) === "[object Function]";
}
function load(url){
var script = document.createElement('script'),
done = false;
script.src = url;
script.async = true;
script.charset = charset;
script.onload = script.onreadystatechange = function() {
if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) {
done = true;
script.onload = script.onreadystatechange = null;
if ( script && script.parentNode ) {
script.parentNode.removeChild( script );
}
}
};
if ( !head ) {
head = document.getElementsByTagName('head')[0];
}
head.appendChild( script );
}
if(typeof params === "string"){
params = params || "";
query += "&";
}else{
params = params || {};
for (var key in params ) {
if ( params.hasOwnProperty(key) ) {
query += encodeURIComponent(key) + "=" + encodeURIComponent(params[key]) + "&";
}
}
}
var jsonVar = "jsonp" + getTimeVer();
w[jsonVar] = function(data){
callback.call(null, data);
try{
delete w[jsonVar];
}catch(e){
}
w[jsonVar] = null;
};
load(url + query + "callback=" + jsonVar);
}
document.getElementById("click").onclick = function(){
getJSON("http://www-0f3d8c090ce:8080/foundation/servlet/JsonCallBack", function(data){
alert(data.name);
});
};
相关文章推荐
- 一个防止页面刷新后,ajax请求的数据被重置的方法
- 动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多 第一种方式:指定method属性 这种方式我们前面已经用到过
- SpringMVC支持Jsonp跨域请求的方法
- 浏览器禁止跨域请求json数据解决方法--jsonp
- WCF路由所有的请求到一个方法--route all request to one operation
- 在php中判断一个请求是ajax请求还是普通请求的方法
- AngularJS 用 $http.jsonp 方法跨域请求数据错误的问题
- 最近做项目发现一个小bug,get方法请求spring+DBCP+Struts框架出现中文乱码
- 在一个Servlet中处理多个请求方法
- Nginx反向代理、CORS、JSONP等跨域请求解决方法总结
- 进行同一Controller里的不同方法Get请求时,总是定位到Controller里的同一个方法的解决
- jsonp多次请求报错 not a function的解决方法
- ajax传一个数组到springMVC的请求方法中,方法得不到请求的参数
- Nginx反向代理、CORS、JSONP等跨域请求解决方法总结
- 在php中判断一个请求是ajax请求还是普通请求的方法
- 跨域请求两种方法 jsonp和cors的实现
- 使用session时候,遇到的一个问题(请求解决方法)
- Nginx反向代理、CORS、JSONP等跨域请求解决方法总结
- 在php中判断一个请求是ajax请求还是普通请求的方法
- springmvc结果的转发和重定向 (需求:在同一个请求中调用多个方法) (13)