2013-08-20 85 views
2

如何在此延迟函数中使用myValue以便定义myQuery?传递变量以推迟JSON函数?

$.getJSON('lorem.json', function (data) { 

    var myKey = $("input").val(); 
    var myValue = data[myKey]; 

}).then(function() { 

    var myQuery = "http://example.com?q=" + myValue ; 

    $.getJSON(myQuery, function (info) { 
     console.log(info); 
... 
+1

尝试全球IT,而不是'无功myvalue的数据= [的myKey]'用'window.myValue =数据[的myKey]'然后用它与你'myQuery'像'VAR更改为MyQuery = “http://example.com?q=” + window.myValue;' – MaveRick

+2

你就不能使用一个回调函数?为什么你需要将功能分成两部分? –

+0

@MaveRick全局变量是矫枉过正,如果在另一个脚本文件中的一些时候你要使用相同的全局变量用于不同的目的,只会导致问题。您可以将'myValue'移动到'$ .getJSON' *调用*的包含范围内,这将使这两个回调函数都可以访问它。如果包含范围不是全局范围,而是另一个函数范围,则它不会污染全局范围,也不会导致命名冲突。无论哪种方式,看起来好像OP想要做更简单的事情,为此可能有一个更简单的解决方案。 –

回答

3

您可以使用父上下文

var myValue = null; 
$.getJSON('lorem.json', function (data) { 

    var myKey = $("input").val(); 
    myValue = data[myKey]; 

}).then(function() { 

    var myQuery = "http://example.com?q=" + myValue ; 

    $.getJSON(myQuery, function (info) { 
     console.log(info); 
+0

制造全局并不是一个好习惯。用函数包装它,但这种方法有一个缺点。例如,如果您创建的实用程序函数返回从data - > info发送的延迟,则无法访问该变量而不使其全部可用。延期后,您可以随身携带这些信息,并轻松将回调信息传递给您在步骤中获取的任何信息。 – jcbelanger

+0

但是代码不会生成var全局变量,只能使用父上下文创建var变量。每个功能将创建一个自我上下文,共享一个数据,只有在父上下文中才有可能。 –