getJSON为什么不能赋值出来?
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<div>history.json中的代码如下:</div>
<div>
{"folder":"cms","page":"index_article.htm","abs_class_array_merge":["li_h24","li","li_66","li_h23","li_62","alpha20a","alpha_h30","w240","w90","w60","w200","w290","w100","w310","w3","w190","h70","h30","h25","h24","h120","h23","mgb5","mgb10","pdl5","pdr5","pdl10","pdt5","pdr10","pdt10","pd5"]}
</div><script type="text/javascript">
var abcd=[];
$.getJSON("history.json",function(o){
if(o.abs_class_array_merge){
abcd=o.abs_class_array_merge;
}
alert(abcd); //getJSON 内部已经赋值给abcd,可以alert出数据来
});
// ps:怎么暂停5秒再执行下面的语句?
alert(abcd); // 外部再alert 还是空白。
</script>

解决方案 »

  1.   

    你用的AJAX,当js加载完成后,首先会执行AJAX请求发送,当成功返回后在执行“function(o){
            if(o.abs_class_array_merge){
                abcd=o.abs_class_array_merge;
            }
            alert(abcd);    //getJSON 内部已经赋值给abcd,可以alert出数据来
        });”,执行到这个函数可能需要点时间
    但外部alert()或在这段js加载完成后立即执行,所以应该先看到外部的alert出一个未赋值的数组,即空白的数字,然后才能看到一个有数据的alert 即回调函数中的alert
    这里存在一个时间差对吧?而且无法确定时间差是多少,这由服务器、网络响应时间决定。所以,使用ajax时,如果要看请求结果,我们往往需要的是在回调函数中去做处理 即你所写的在getJSON 中的 funcion(o)。
      

  2.   

    因为延迟的问题所以,对应的操作,应该都在ajax回调函数之内
      

  3.   

    jquery中ajax默认是异步方式,所以会有延迟,如果一定要在外边调用,可以设置成同步的方式。
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <div>history.json中的代码如下:</div>
    <div>
    {"folder":"cms","page":"index_article.htm","abs_class_array_merge":["li_h24","li","li_66","li_h23","li_62","alpha20a","alpha_h30","w240","w90","w60","w200","w290","w100","w310","w3","w190","h70","h30","h25","h24","h120","h23","mgb5","mgb10","pdl5","pdr5","pdl10","pdt5","pdr10","pdt10","pd5"]}
    </div><script type="text/javascript">
        var abcd=[];
        //设置成同步
        $.ajaxSetup({ async: false});
        $.getJSON("history.json",function(o){
            if(o.abs_class_array_merge){
                abcd=o.abs_class_array_merge;
            }
            alert(abcd);    //getJSON 内部已经赋值给abcd,可以alert出数据来
         
        });
        // ps:怎么暂停5秒再执行下面的语句?
        alert(abcd);        // 外部再alert 还是空白。
    </script>
      

  4.   


    getjson为什么无法执行回调函数?
      return Json(modellist.ToList(), JsonRequestBehavior.AllowGet);
    运行效果有个好怪的问题,IE有问题(不显示),FireFor没问题(OK).
      原因:千万要记得以这个结束</select>,IE不认别<select/>