在JS/JSON函数内返回变量

在JS/JSON函数内返回变量

问题描述:

我想了解JS中的JSON,回调等。从下面的更改示例中,您将看到我正在从$ .getJSON进行函数回调。然后,我跳入getSomething()并期望它改变我的结果变量。它在功能的范围内改变它,但不是当我跳出该功能时。在JS/JSON函数内返回变量

您将从2 console.log()中看到第一个显示正确,第二个显示不正确。我确定我的问题的答案与通过返回变量有关。回拨,但可以有人启发
我:)

谢谢!

CODE:

$.getJSON('/cart.js', function (cart, textStatus) { 
    var result = ''; 
    result += 'Sample Stuff'; 
    *.getSomething(param1, param2, function(a, b) { 
    for(j=0; j < b.length; j++) { 
     if (b.options[j] != 'Default Title') { 
     if (a.options[j].name.indexOf("Color") > -1) { 
      result += b.options[j].name; 
      console.log(result); // <-- It comes out correct (Sample Stuff + b.options...) 
     } 
     } 
    } 
    }); 
    console.log(result); // <-- It comes out incorrect, just (Sample Stuff) 
}); 

我猜*.getSomething()运行的AJAX请求?因此,在AJAX请求完成之前,其回调内定义的内容(循环通过ab)不会执行。会发生什么是*.getSomething被激发,然后console.log(result)在您的代码结束后立即执行。到那时,*.getSomething的回调尚未运行,并且result尚未更新。只记录“Sample stuff”。但是,当第二个console.log在AJAX请求(getSomething)之后的回调中执行时,result已更新并“正确”记录。

换句话说,执行顺序将是这个

  1. result到“样品东西”
  2. *.getSomething()火灾具有附接的回调函数
  3. console.log(result)日志“样品东西”
  4. AJAX请求
  5. ajax回调完成并触发其回调函数。 result通过遍历ab
  6. 回调函数的console.log(result)日志result
+0

感谢您的解释终值相应地更新。我想我可能已经假设了大部分,但仍然不知道如何让getSomething()中的“结果”与getJSON()绑定,以便在getJSON()的其余部分执行之前发生。 – 2010-07-30 20:28:40

+0

如果你依赖'result'来正确getJSON的其余部分才能正常工作,那么你必须将其余的getJSON代码放入'*.getSomething'的回调中:) – 2010-07-30 20:33:32