0

誰でもこのコードの問題を見ることができますか? 'out' が返される場合、値は "" です。理由はわかりません。おそらく、getJSON関数が認識していないためです。

この関数に URL を渡し、URL で getJSON を実行し、結果 (これも書式設定しています) をテキスト文字列に追加しようとしています。それらをすべて 1 つのテキスト文字列にしたいので、文字列を正規表現で解析できます。どんな助けでも大歓迎です、ありがとう!

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

3 に答える 3

2

AJAX は非同期です。

同じ方法でコールバック関数を使用して値を返す必要がありますgetJSON

function getSearch(url, callback) {
    $.getJSON(..., function() { 
        ...
        callback(...);
    });
}
于 2012-05-24T18:51:34.610 に答える
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 );
});
于 2012-05-24T18:57:47.117 に答える
1

$.getJSON非同期です。これはout、AJAX 呼び出しが終了する前に が返されることを意味します。

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
});
于 2012-05-24T18:57:42.183 に答える