IE下就是 不callback
<script language='javascript'>
var _FBY={};
_FBY.getJSON=function(url,fun,charset){
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.language = "javascript";
script.src=url;
if (!charset)
charset='utf-8';
script.charset = charset;
//为浏览器做兼容
script.onload = script.onreadystatechanged = function() {
if (!this.readyState || this.readyState == "loaded"
|| this.readyState == "complete") {
if (typeof (fun) == "function")
fun();
script.onload = script.onreadystatechanged = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
function callback(){
alert(123);
}_FBY.getJSON('json.js',callback);
</script>
<script language='javascript'>
var _FBY={};
_FBY.getJSON=function(url,fun,charset){
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.language = "javascript";
script.src=url;
if (!charset)
charset='utf-8';
script.charset = charset;
//为浏览器做兼容
script.onload = script.onreadystatechanged = function() {
if (!this.readyState || this.readyState == "loaded"
|| this.readyState == "complete") {
if (typeof (fun) == "function")
fun();
script.onload = script.onreadystatechanged = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
function callback(){
alert(123);
}_FBY.getJSON('json.js',callback);
</script>
<script language='javascript'>
var _FBY={};
_FBY.getJSON = function(url,fun,charset){
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.language = "javascript";
script.src=url;
if (!charset){charset='utf-8'; }
script.charset = charset;
//为浏览器做兼容
script.onload = script.onreadystatechanged = function() { //这块有问题,到这根本不执行~·
if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") {
if (typeof fun == "function"){fun();};
script.onload = script.onreadystatechanged = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
function callback(){
alert(123);
}
_FBY.getJSON('json.js',callback);
</script>
<script language='javascript'>
var _FBY={};
_FBY.getJSON = function(url,fun,charset){
var head = document.getElementsByTagName("head")[0];
var isIE = document.all?true:false;
var script = document.createElement('script');
script.language = "javascript";
script.src=url;
if (!charset){charset='utf-8'; }
script.charset = charset;
//为浏览器做兼容
if(isIE){
script.onreadystatechanged = run.call(this,fun);
}else{
script.onload = run.call(this,fun);
}
head.appendChild(script);
}
function callback(){
alert(123);
}
function run(fun){
if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") {
if(typeof fun == "function"){fun();};
script.onload = script.onreadystatechanged = null;
head.removeChild(script);
}
};
_FBY.getJSON('json.js',callback);
</script>
在FF下OK就应该是正确的赋值方法。反而我认为
script.onreadystatechanged = run.call(this,fun);这样的赋值方法有问题吧。。初始化的时候直接就执行run方法了。。
只有当onreadystatechanged,onload这个事件满足的时候才会出发run方法.
如果要onreadystatechanged事件满足的时候出发run方法,应该写成onreadstatechanged=function(){run()};吧
那这句条件if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")是怎么进来的?它怎么就为真了?
if(isIE){
script.onreadystatechanged = function(){run.call(this,fun);}
}else{
script.onload = function(){run.call(this,fun);}
}
这么写不就行了~·