2013-04-23 13 views
0

我正在嘗試對生成xml的googlesuggest頁面進行ajax調用。我用一個小黑客,似乎工作,並記錄在案here 的代碼是這樣的:來自Chrome擴展的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更換$阿賈克斯的代碼。

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:

我替換下客戶的關鍵字 '火狐':說明符的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找到。

+0

你可以把方法.fail看看你是否得到一個錯誤。 Chrome開發人員控制檯顯示錯誤? – aelbaz 2013-04-23 09:26:05

+0

任何控制檯都沒有錯誤。我會嘗試與.fail現在。我忘了提及我授予csp的權限,如下所示: '「content_security_policy」:「script-src'self'https://suggestqueries.google.com/; object-src'self'」' – Edeph 2013-04-23 10:29:51

+0

在清單中文件已授予該網址的權限:'https://suggestqueries.google.com/complete/search'? – aelbaz 2013-04-23 11:48:12

回答

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'