2012-02-03 75 views
1

我想在函数中运行ajax请求。基本上...

function doIt(id) { 
    var myVar; 
    $.ajax({ 
     ... url etc... 
     success: function(result) { 
      myVar = "Some stuff" + result; 
      console.log(myVar); 
     } 
    }) 
    return myVar; 
} 

但myvar未设置为当我登录成功后它是什么。我怎样才能得到该功能重新调整的变量?

+0

记录“结果” - 在那里检查。 – 2012-02-03 22:29:28

回答

2

$.ajax是异步的,这意味着它在下一行执行之前没有完成。正在发生的事情是success事件触发之前return myVar;正在执行。

关闭async财产关闭,并且将表面上解决您的问题:

function doIt(id) { 
    var myVar; 
    $.ajax({ 
     ... url etc..., 
     async: false, 
     success: function(result) { 
      myVar = "Some stuff" + result; 
      console.log(myVar); 
     } 
    }) 
    return myVar; 
} 

但是,这将使你的浏览器挂起,所以解决这个最好的办法是把所有处理success事件的内部。

function doIt(id) { 
    var myVar; 
    $.ajax({ 
     ... url etc..., 
     async: false, 
     success: function(result) { 
      myVar = "Some stuff" + result; 
      console.log(myVar); 
      // TODO: Everything related to `myVar` here. 
     } 
    }) 
} 
+0

@justing,async false不是好事,因为它会阻止用户,直到它完成,而是在成功执行您的操作 – kobe 2012-02-03 22:30:25

+1

这通常是一个可怕的想法,因为浏览器将挂起,直到请求完成。这样做有一些原因,但没有很多好的。 – 2012-02-03 22:30:45

+0

'async:false'将锁定浏览器直到完成调用。我建议不要这样做。相反,我建议改变你使用'myVar'的方式。 – 2012-02-03 22:30:50

3

Ajax调用是aysnc,所以它发生平行就是原因,你没有得到结果

您不能返回这样的 var myVar;

function doIt(id) { 

    $.ajax({ 
     ... url etc... 
     success: function(result) { 
      myVar = "Some stuff" + result; 
      console.log(myVar); 
      // do your logic here after the ajax success 
     } 
    }) 
} 
2

你不能值从AJAX调用中返回一个值。它是异步的。在AJAX调用完成之前运行return

您需要在回调中执行所有有关myVar的逻辑。