在getJSON中附加到字符串

时间:2012-05-24 18:46:40

标签: javascript jquery

有人能看到这段代码的问题吗?当' out'返回时,它的值为""。我不知道为什么,或许它是关于getJSON函数我不知道的事情。

我尝试将URL传递给此函数,让它在URL上执行getJSON,并将结果(我也将格式化)添加到文本字符串中。我希望它们都在一个文本字符串中,所以我可以用正则表达式解析字符串。感谢任何帮助,谢谢!

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;
}

3 个答案:

答案 0 :(得分:2)

AJAX 异步

您需要使用回调函数返回值,方式与getJSON相同:

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

答案 1 :(得分: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返回promise并在解析deferred时将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 );
});

答案 2 :(得分:1)

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

您无法从AJAX调用中返回任何内容,您需要在回调中将out处理$.getJSON的所有代码添加到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 }); 返回值,而是向其发送回调。

{{1}}