1

我有一个查询 Google AJAX 搜索 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

你需要使用 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 回答
0

Ajax请求的结果是:jsonp({"responseData":... }); 不是 {"responseData":... }

此代码在调用“成功”回调时进行评估。我认为您所要做的就是定义一个名为 jsonp 的新函数,如下所示:

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