var temp;
        $.ajax({
            async: false,//已经是同步请求了
            dataType: "json",
            data: { act: "G" },
            url: Map_Server,//远程地址
            error: function (XmlHttpRequest, textStatus, errorThrown) { },
            success: function (d) {
                if (d.R == "1") {
                    temp = d.T;
                } else {
                    temp = null;
                }
                alert(temp + "/");
            }
        });
        alert(temp + "|");
        return temp;为什么结果是:   undefined|
                 [object Object]/  
                 [object Object]          //如果中间没有alert的话,返回的是undefined
我已经设置同步请求了。
同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。难道这句话,过时了,不中用了?????

解决方案 »

  1.   

    以下代码测试下来没什么问题,是按照顺序执行的。是不是缓存之类的问题?
    加一个cache:false,global:false, 试试看
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <script type="text/javascript">
    var Map_Server = "test.asp";
    function doit(){
    var temp;
    $.ajax({
    async:false,//已经是同步请求了
    dataType:"json",
    cache:false,
    global:false,
    data: { act: "G" },
    url: Map_Server,//远程地址
    success:function(d){
    if (d.R == "1") {
    temp = d.T;
    } else {
    temp = null;
    }
    alert(temp + "/");
    }
    });
    alert(temp + "|");
    return temp;
    }
    alert(doit())
    </script>
      

  2.   

    加一个cache:false,global:false  这些都加了,还是不行。   请求的地址是一个远程地址,如果是本地地址的话,是可以的,关键是,别人请求是的远程地址(也就是我本地的地址),是不行的。
      

  3.   

    远程的怎么取json? Ajax不能跨域的,要么用jsonp, 不过要远程返回相关脚本的。
    跨域的话,通过后台代理取得后再返回给客户端.
      

  4.   

    同步的时候应该没有回调函数吧?查了下手册,同步示例:
     var html = $.ajax({
      url: "some.php",
      async: false
     }).responseText;
      

  5.   

    ajax取远程地址的值不能跨域,用本地服务器后台读取远程地址返回的数据,然后再用ajax获取本地服务器所得到的远程地址返回的数据
    如果不是跨域, 请楼主检查你后台返回的数据是否正确
      

  6.   

    js是按照jsonp传输的,已经不存在跨域问题。    现在关键的问题是,ajax调用远程地址时,同步请求,没有暂停,等待结果返回后,再执行以下的js语句。   是这个问题。请大家,针对这个问题帮忙分析一下。谢谢。我在网上查了一些,感觉是ajax响应时间差异造成的,但是,同步请求,不是会将锁住浏览器,用户其它操作必须等待请求完成才可以执行。  以下为引用网上搜索内容:(http://bbs.blueidea.com/thread-2866718-1-1.html)刚试了一下。发现在ajax响应时间差异的问题function fn(){
           var str="White";
           var SendAjax=new Ajax.Request('test.txt',{onComplete:RETURN_RESULT});
                  function RETURN_RESULT(res){ //此函数需要在ajax完成请求过程之后才会被执行
                         str=res.responseText;
                  }//该查询结果为“blue”;
           alert(str);//而alert是在fn函数被调用时就执行了,也就是说这里的alert在RETURN_RESULT函数运行之前就执行了,所以str变改还没被改写,可以用setTimeout之类控制一下。但不推荐这样控制,因为ajax响应的时间是未知数
           //str.print();
           //setTimeout('str.print()',1000);
    }
      

  7.   

    你可以使用回调。参见
    http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/
      

  8.   

    楼主。jsnop是不支持同步的。只能用异步。。
      

  9.   

    jquery api里面提到。。
    async"jsonp" requests do not support synchronous operation
      

  10.   

    var temp = "li";
            $.ajax({
                async: false, //已经是同步请求了
                method: 'get',
                cache: false,
                global: false,
                dataType: "json",
                data: {},
                url: 'http://www.baidu.com/test.aspx?jsoncallback=?', //远程地址
                error: function (XmlHttpRequest, textStatus, errorThrown) { alert(textStatus + "/" + errorThrown); },
                success: function (d) {
                    //alert('success');
                    temp = d.name
                    //alert('inside' + temp);
                }
            });
            alert('out' + temp);/*怎么保证“此时”,temp这个值,是正确的?*/
            setTimeout(function () { alert('out' + temp); }, 5000);/*经过几秒的延迟,temp这个值,就是想要的值的。*/
      

  11.   


    哦。那这样怎么办?怎么才能保证下一句js代码调用 不为为null 或者 undefined
      

  12.   


    最好的方法还是放到success回调函数里面