2013-05-08 88 views
0

这makinkg我疯了,我不能得到外部变量获取内部数据JavaScript变量没有更新的价值

很抱歉的坏格式化我从手机写作,如果有人能与格式helpme了我赞赏它

window.getReasons = function(line) { 
    var $reasons; 

    $reasons = ""; 
    $.get(window.location.protocol + "//" + window.location.host + "/" + "allLineReasons.js?line=" + line, function(returnData) { 
     $reasons = returnData.toString(); 
     return console.log("T_T ----->" + returnData.toString()); 
    }, "html"); 
    console.log($reasons); 
    return $reasons; 
    }; 
+0

返回我不递延对象;知道你的“外部变量”,并表示“内部数据”你能有什么要具体说明你想要做什么? – 2013-05-08 19:07:22

+0

@EH_warch,看看jbabey的链接。 $ .get是异步的,你不应该得到正确的值返回在getReasons() – Ben 2013-05-08 19:08:54

+0

这不会工作,因为你是在它被设置为其新值之前返回原因变量。请记住,这是一个异步调用 – Ibu 2013-05-08 19:09:02

回答

3

让你了解最重要的事情是,$.get()默认情况下异步的。那么,是什么情况是,跟随您的来电get()console.log()return语句执行前的get()返回它的值。

你可能看到这里利用when()方法来处理从get()

window.getReasons = function(line) { 
    var reasons = ''; 
    $.when(
     $.get(window.location.protocol + "//" + window.location.host + "/" + "allLineReasons.js?line=" + line) 
    ).done(function(jqxhr) { 
     data = jqxhr[0]; 
     reasons = data.toString(); 
    }); 
    console.log(reasons); 
    return reasons; 
} 
+0

我不知道when函数,并没有想到完成。谢谢! – 2013-05-08 22:02:11

+0

有没有办法在核心JavaScript中做到这一点? – rashadb 2015-02-09 19:53:30

1

$原因将不会更新,直到服务器上的GET完成并返回响应之后。但是你的console.log会在请求发出后立即执行。