0

2 つの Google API から結果を取得し、結果を整数値で並べ替えてユーザーに表示する検索候補スクリプトがあります。

ただし、現在、スクリプトは、ユーザーが Enter キーまたは Return キーを押すまで、2 番目の API から結果を返すようには見えません。これはなぜですか?

JSFiddle: http://jsfiddle.net/m8Kfx/

私のコードは次のとおりです。

var combined = [];
$(document).ready(function(){
    $("#search").keyup(function(){
        $("#suggest").html("");
        $.getJSON("http://suggestqueries.google.com/complete/search?q="+$("#search").val()+"&client=chrome&callback=?",function(data){
            for(var key in data[1]){
                if(data[4]["google:suggesttype"][key]=="NAVIGATION"){
                    combined.push("<li rel='"+data[4]["google:suggestrelevance"][key]+"'><a href='"+data[1][key]+"'>"+data[2][key]+"</a></li>");
                }else{
                    combined.push("<li rel='"+data[4]["google:suggestrelevance"][key]+"'>"+data[1][key]+"</li>");
                }
            }
        });
        $.getJSON("https://www.googleapis.com/freebase/v1/search?query="+$("#search").val()+"&limit=3&encode=html&callback=?",function(data){
            for(var key in data.result){
                combined.push("<li rel='"+Math.round(data.result[key].score*5)+"'> Freebase: "+data.result[key].name+"</li>");
            }
        });
        combined.sort(function(a,b){
             return +$(b).attr("rel") - +$(a).attr("rel");
        });
        $("#suggest").html(combined.slice(0, 5).join(""));
        combined = [];
    });
});
4

4 に答える 4

0

コードについて 2 つのことに気付きました。

並べ替えと追加は、ajax 関数のコールバックで呼び出す必要があります。これは、並べ替えと表示を処理する別の関数を作成することで実現できます。次に、成功のコールバックでこの関数を呼び出します。

次に、freemarker の結果が表示されますが、常にリストの一番下に送信されます。200 件の結果を表示すると、それらは一番下にあります。

var combined = [];
$(document).ready(function(){
    $("#search").keyup(function(){
        $("#suggest").html("");
        $.getJSON("http://suggestqueries.google.com/complete/search?q="+$("#search").val()+"&client=chrome&callback=?",function(data){
            for(var key in data[1]){
                if(data[4]["google:suggesttype"][key]=="NAVIGATION"){
                    combined.push("<li rel='"+data[4]["google:suggestrelevance"][key]+"'><a href='"+data[1][key]+"'>"+data[2][key]+"</a></li>");
                }else{
                    combined.push("<li rel='"+data[4]["google:suggestrelevance"][key]+"'>"+data[1][key]+"</li>");
                }
            }
            sortAndDisplay(combined);
        });
        $.getJSON("https://www.googleapis.com/freebase/v1/search?query="+$("#search").val()+"&limit=3&encode=html&callback=?",function(data){
            for(var key in data.result){
                combined.push("<li rel='"+Math.round(data.result[key].score*5)+"'> Freebase: "+data.result[key].name+"</li>");
            }
            sortAndDisplay(combined);
        });
    });
});

function sortAndDisplay(combined){
        combined.sort(function(a,b){
             return +$(b).attr("rel") - +$(a).attr("rel");
        });
        $("#suggest").html(combined.slice(0, 200).join(""));
        combined = [];
}

作業例 http://jsfiddle.net/m8Kfx/4/

于 2013-06-24T09:28:23.843 に答える
0

このようなことができます

var allData = []
$.getJSON("/values/1", function(data) {
    allData.push(data);
    if(data.length == 2){
      processData(allData) // where process data processes all the data
    }
});

$.getJSON("/values/2", function(data) {
    allData.push(data);
    if(data.length == 2){
        processData(allData) // where process data processes all the data
    }
});

var processData = function(data){
     var sum = data[0] + data[1]
     $('#mynode').html(sum);
}
于 2013-06-24T09:22:07.477 に答える
0

次のように、最初の getJSON で 2 番目の getJSON をラップします。ニースコードところで。

var combined = [];
$(document).ready(function(){
$("#search").keyup(function(){
    $("#suggest").html("");
    $.getJSON("http://suggestqueries.google.com/complete/search?q="+$("#search").val()+"&client=chrome&callback=?",function(data){
        for(var key in data[1]){
            if(data[4]["google:suggesttype"][key]=="NAVIGATION"){
                combined.push("<li rel='"+data[4]["google:suggestrelevance"][key]+"'><a href='"+data[1][key]+"'>"+data[2][key]+"</a></li>");
            }else{
                combined.push("<li rel='"+data[4]["google:suggestrelevance"][key]+"'>"+data[1][key]+"</li>");
            }
        }

                $.getJSON("https://www.googleapis.com/freebase/v1/search?query="+$("#search").val()+"&limit=3&encode=html&callback=?",function(data){
        for(var key in data.result){
            combined.push("<li rel='"+Math.round(data.result[key].score*5)+"'> Freebase: "+data.result[key].name+"</li>");
        }
    });

    });



    combined.sort(function(a,b){
         return +$(b).attr("rel") - +$(a).attr("rel");
    });
    $("#suggest").html(combined.slice(0, 5).join(""));
    combined = [];
});

});

于 2013-06-24T09:22:17.700 に答える