1

Google AJAX Search API を照会して結果を返す jQuery スクリプトがあります。ただし、現在、すべての結果が「未定義」として返されています。

どうすればこれを修正できますか?

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

$(document).ready(function(){
        var resultsDiv = $('#resultsDiv');

        $.getJSON('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&callback=jsonp',{q:"google",rsz:8,start:0},function(r){
            var results = r.responseData.results;
                var pageContainer = $('<div>',{className:'pageContainer'});
                for(var i=0;i<results.length;i++){
                    pageContainer.append('<div class="webResult"><h2><a href="'+r.responseData.results.unescapedUrl+'" target="_blank">'+r.title+'</a></h2><p>'+r.responseData.results.content+'</p><a href="'+r.responseData.results.unescapedUrl+'" target="_blank">'+r.responseData.results.visibleUrl+'</a></div>');
                }
                resultsDiv.empty();
                pageContainer.append('<div class="clear"></div>').hide().appendTo(resultsDiv).fadeIn('slow');
        });
});
4

2 に答える 2

0

Ajax リクエストの結果は次のとおりです。 jsonp({"responseData":... }); {"responseData":...} ではない

このコードは、'success' コールバックが呼び出されたときに評価されます。次のように jsonp という名前の新しい関数を定義するだけでよいと思います。

function jsonp(r){
      var results = r.responseData.results;
      ....
}
于 2012-09-20T19:24:40.340 に答える
0

jsonp 応答を返すため、jsonp を使用する必要があります。

$.ajax({
  type: "GET",
  url: "http://ajax.googleapis.com/ajax/services/search/web?v=1.0", 
  data: {q:"google",rsz:8,start:0},
  dataType: 'jsonp', //<---
  success: function(r){
        var results = r.responseData.results;
            var pageContainer = $('<div>',{className:'pageContainer'});
            for(var i=0;i<results.length;i++){
                pageContainer.append('<div class="webResult"><h2><a href="'+r.responseData.results.unescapedUrl+'" target="_blank">'+r.title+'</a></h2><p>'+r.responseData.results.content+'</p><a href="'+r.responseData.results.unescapedUrl+'" target="_blank">'+r.responseData.results.visibleUrl+'</a></div>');
            }
            resultsDiv.empty();
            pageContainer.append('<div class="clear"></div>').hide().appendTo(resultsDiv).fadeIn('slow');
    }
});

http://jsfiddle.net/bYSZg/

編集:

未定義と表示される理由は次のとおりです..データを正しく取得しています

pageContainer.append('<div class="webResult"><h2><a href="'+r.responseData.results.unescapedUrl+'" target="_blank">'+r.title+'</a></h2><p>'+r.responseData.results.content+'</p><a href="'+r.responseData.results.unescapedUrl+'" target="_blank">'+r.responseData.results.visibleUrl+'</a></div>');

する必要があります

pageContainer.append('<div class="webResult"><h2><a href="'+r.responseData.results[i].unescapedUrl+'" target="_blank">'+r.responseData.results[i].title+'</a></h2><p>'+r.responseData.results[i].content+'</p><a href="'+r.responseData.results[i].unescapedUrl+'" target="_blank">'+r.responseData.results[i].visibleUrl+'</a></div>');

http://jsfiddle.net/XhuH6/1/

于 2012-09-20T18:55:22.413 に答える