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>

解决方案 »

  1.   


    <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>
      

  2.   

    是的,但这块我是根据JQUERY里写的。。看不出来哪里的问题?有懂的吗?-
      

  3.   


    <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>
      

  4.   

    script.onload = script.onreadystatechanged = function()主要是这句话的问题~·可能不能这样赋值~·后来我加了一句判断浏览器var isIE = document.all?true:false;这样~·
      

  5.   


    在FF下OK就应该是正确的赋值方法。反而我认为
    script.onreadystatechanged = run.call(this,fun);这样的赋值方法有问题吧。。初始化的时候直接就执行run方法了。。
      

  6.   


    只有当onreadystatechanged,onload这个事件满足的时候才会出发run方法.
      

  7.   


    如果要onreadystatechanged事件满足的时候出发run方法,应该写成onreadstatechanged=function(){run()};吧
      

  8.   

    那按你这么说,你的意思是页面刚加载完就执行run方法了?
    那这句条件if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")是怎么进来的?它怎么就为真了?
      

  9.   


    if(isIE){
                script.onreadystatechanged = function(){run.call(this,fun);}
            }else{
                script.onload = function(){run.call(this,fun);}
            }
    这么写不就行了~·
      

  10.   

    原来是这个没有后面那个d啊~·script.onreadystatechanged呵呵``
      

  11.   

    晕,用IE打不开 json 写的程序