自己动手写jsonp

jsonp是解决跨域调用的一种方法,主要是通过script标签允许跨域的原理来实现。

下面就是示例代码:

			var head = document.getElementsByTagName("head")[0];			
			var j = document.createElement("script");
			j.type = "text/javascript";
			if (c){
				var id='tpc'+new Date().getTime();
				src += '&jsonpid='+id;
                        //the response should call the function passed by jsonpid  
				window[id] = function(r){c(r);window[id]=null;};				
			}
			j.onload = j.onreadystatechange = function() {
				if ((!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {		
                              //ie hack
					j.onload = j.onreadystatechange = null;
					if (head && j.parentNode) {
						head.removeChild(j);
					}
				}
			}
			j.src = src + '&tmp=' + new Date().getTime();
			head.appendChild(j);
		

需要注意的问题是:

IE下onload事件触发不了,但是有onreadystatechange事件,

script标签设置一次src后,再改动它的src是没有效果的,所以必须每次创建,然后删除。

上面的例子还需要服务端返回的script内容调用传入的函数名来达到传递参数的效果。

还没有想到失败事件怎样实现?


Total views.

© 2013 - 2024. All rights reserved.

Powered by Hydejack v6.6.1