2012-05-24 63 views
0

任何人都可以看到这个代码的问题?当退出时,它的值为“”。我不知道为什么,也许这是关于我不知道的getJSON函数的东西。追加到getJSON中的字符串

我想通过一个URL到这个函数,让它执行getJSON的URL,并添加结果(我也格式化)到一个文本字符串。我希望他们都在一个文本字符串,所以我可以用正则表达式解析字符串。任何帮助表示赞赏,谢谢!

function getSearch(url) { 
var out = ''; // output variable 

$.getJSON(url, function(data) { 
    for(var i = 0; i < numResults; i++) { 
     out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>'; 
    } 
}); 

return out; 
} 
+0

你的JSON看起来是怎样的? – Shyju

+1

欢迎来到** async **的精彩世界!你不能那样做。 – SLaks

+0

@SLaks - 有关解决方法的任何想法? – callmecavs

回答

2

ajax是异步的,你的代码会在ajax请求完成之前返回。 有几种方法可以重构代码。

您可以传递一个回调函数,一旦请求完成就会执行回调函数。

function getSearch(url, callback) { 
    $.getJSON(url, function(data) { 
    var out = '';  
    // btw what is numResults ?? 
    for(var i = 0; i < numResults; i++) { 
     out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>'; 
    } 
    if(typeof callback === 'function') callback(out); 
    }); 
} 

然后,你会使用这样的功能。

getSearch('test.php', function(out){ 
    // here you can use the out variable 
}); 

或者你可以使用jQuery deferreds返回一个承诺,并通过out变量,当您解决延迟参数的一部分。这里是一个例子

function getSearch() 
{  
    var deferred = $.Deferred(); 
    $.getJSON(url, function(data) { 
    var out = '';  
    // btw what is numResults ?? 
    for(var i = 0; i < numResults; i++) { 
     out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>'; 
    } 
    deferred.resolve(out); // resolve the request and pass in the out argument. 
    }); 

    return deferred.promise(); // return a promise 
} 


$.when(getSearch()).then(function(out){ // the out variable will get passed in 
    console.log(out); 
}); 
+1

+1延迟:-) –

2

AJAX是异步

你需要使用一个回调函数返回值,以同样的方式getJSON作用:

function getSearch(url, callback) { 
    $.getJSON(..., function() { 
     ... 
     callback(...); 
    }); 
} 
+0

你能提供一个例子吗?或链接阅读更多?品牌新的这个东西,刚刚开始JavaScript的前几天= X – callmecavs

1

$.getJSON是异步的。这意味着在AJAX调用完成之前返回out

您无法从AJAX调用中返回任何内容,您需要在$.getJSON的回调中添加处理out的所有代码。

我建议将回调函数传递给你的函数。事情是这样的:

function getSearch(url, callback) { 
    var out = ''; 
    $.getJSON(url, function(data) { 
     for(var i = 0; i < numResults; i++) { 
      out += '<p class="hash_list">' + '<a href="http://www.twitter.com/' + data.results[i].from_user + '">' + data.results[i].from_user + '</a>: ' + data.results[i].text + '</p>'; 
     } 
     if(typeof callback === 'function'){ 
      callback(out); // call your callback with data 
     } 
    }); 
} 

现在,而不是期望从getSearch返回值,你把它的回调。

getSearch('http://example.com/myurl', function(data){ 
    // this function will get called sometime in the future, 
    // once $.getJSON is done, "data" will be the "out" from the AJAX call 
});