来自Chrome扩展程序的ajax调用失败

时间:2013-04-23 09:18:02

标签: jquery ajax google-chrome-extension google-suggest

我正在尝试对生成xml的googlesuggest页面进行ajax调用。我使用了一个似乎有用的小hack并记录在案here 代码是这样的:

$.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:说明符下用'youtube'替换了关键字'firefox',它现在返回如下内容:

    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上找到用于测试目的的非常好的工具。

1 个答案:

答案 0 :(得分: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
            };

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