0

我正在尝试对生成 xml 的 googlesuggest 页面进行 ajax 调用。我使用了一个似乎可行的小技巧,并在此处记录了 代码是这样的:

$.ajax({
  url: 'https://suggestqueries.google.com/complete/search',
  data: {
    client: 'firefox',
    q: word,
  },
  dataType: 'jsonp'
})
.done(function(dataWeGotViaJsonp){
  var len = dataWeGotViaJsonp.length;
  for(var i=0;i<len;i++){
    alert(dataWeGotViaJsonp[i]);
  }
});

我的扩展程序的控制台中没有任何错误,但它不会生成任何内容。我应该如何使它正常工作或有什么问题?

this : 返回的数据如下所示:

["ob",["obama","obamacare","obituaries","obey","oblivion","obama phone","oberlin college","obama gun control","obagi","obsidian"]]

其中“ob”是搜索词。

更新:

这是我在这篇文章中提供的第一个链接的说明之后更新的代码,用 $.getJSON 替换了 $.ajax。

function process(word){
  $.getJSON("https://suggestqueries.google.com/complete/search?callback=?",
    { 
      "jsonp":"suggestCallBack", // jsonp callback function name
      "q":word, // query term
      "client":"firefox" // force youtube style response, i.e. jsonp
    }
  );
  suggestCallBack= function(dataWeGotViaJsonp){
    alert("asdas");
    var len = dataWeGotViaJsonp.length;
    for(var i=0;i<len;i++){
      alert(dataWeGotViaJsonp[i]);
    }
  };
};

更新 2:

我将 client: 说明符下的关键字 'firefox' 替换为 'youtube' ,它现在返回如下内容:

    window.google.ac.h
    (
    ["ob",[["obama",0,[]],
    ["obamacare",0,[]],
    ["obituaries",0,[]],
    ["obey",0,[]],
    ["oblivion",0,[]],
    ["obama phone",0,[]],
    ["oberlin college",0,[]],
    ["obama gun control",0,[]],
    ["obagi",0,[]],
    ["obsidian",0,[]]],
    {"k":1,"q":"I3uqQqdI9GsurIoEbRJwRQ_P7Co"}]   
)

我不知道如何实际解析。我很好奇为什么它不能在标准的谷歌搜索下工作。可以在这个JSfiddle上找到一个非常好的测试工具。

4

1 回答 1

0

我设法让它工作,但它的行为有点不同,比这个链接指定的有点奇怪。问题是我从 $.ajax 切换到 $.getJSON 调用,并且我使用了文档中指示的内容,即使我使用了client: 'youtube'说明符,实际上也得到了谷歌结果(检查)。我认为现在谷歌将其用于 youtube 和谷歌搜索,或者他们以某种方式混淆了。

$.getJSON("https://suggestqueries.google.com/complete/search?callback=?",
                { 
                  "jsonp":"suggestCallBack", // jsonp callback function name
                  "q":query, // query term
                  "client":"youtube" // force youtube style response, i.e. jsonp
                }
            );
    suggestCallBack = function (data) {
                var suggestions = []; //creates void array
                $.each(data[1], function(key, val) {
                    suggestions.push(val[0]); //moves every suggestion from the word into the array
                })
                suggestions.length = 1; //restricts the array to only the first element
                suggestions = []; //resets the array to void for future calls
            };

这对我来说非常有效,它应该适用于任何人。我认为它也可以与 the 一起使用,$.ajax但只能使用client: 'youtube'.

于 2013-04-25T20:17:35.483 回答