function test()
{
   var str = "";
   $.getJSON
   (
       url,
       {},
       function(json)
       {
          //....操作代码
          str = ...;
       }
   );
   $().html(str);
}
现在遇到的问题是,getJSON执行的时候由于readystate还没有等于4,他会先把 $().html();执行完。
然后到readystate=4的时候才执行操作代码。这样str的值就赋不上了。请问解决方法是怎么样?
这是什么原因呢?

解决方案 »

  1.   

    把$().html(str);
    放在getJSON的function里去,你放外面干嘛?ajax本来就有延迟
      

  2.   

    这是异步操作。//写在回调函数里function test()
    {
       var str = "";
       $.getJSON
       (
           url,
           {},
           function(json)
           {
              //....操作代码
              str = ...;
              $().html(str);
           }
       ); 
    }
      

  3.   

    你把 $().html(); 放在 callback里面不就好了
      

  4.   


    1、将异步改为同步
    2、将html赋值操作放在json异步交互方法中
    3、用setTimeout延时,或是用setTimeout在一定时间内赋值。直到返回的str不为null为止原因是异步交互的时候,不会等待$.getJSON请求执行完了才执行下面的代码。而是执行后,直接运行后面的代码。$.getJSON
       (
           url,
           {},
           function(json)
           {
              //....操作代码
              str = ...;
              $().html(str);
           }
       );
       //$().html(str);//放到里面去
      

  5.   

    同情楼主。。getjson是异步执行的
      

  6.   

    用$.ajaxSettings.async = false改成同步之后。是否需要
    $.ajaxSettings.async = true改回来,
    还是只是修改当次有效的?