2012-03-17 58 views
4

我知道這已被問及數十億次,但仍然無法讓我的代碼正常工作。我正在嘗試從我的Javascript應用程序進行簡單的JSONP調用。鱈魚的片段是這樣的:通過JQuery調用Google Ajax搜索API JSONP

url="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=AAA&callback=?"; 

,然後或者:

$.getJSON(url, function(data) { 
    alert('hello 1'); 
    }); 

或:

$.ajax({url: url, 
    datatype: 'jsonp', 
    success: function(data) { alert("hello 2"); }, 
    error: function(j, t, e) { alert(t);} 
}); 

這兩種方法都不適用。第二種方法導致「錯誤」警報。第一個也不會返回成功。我究竟做錯了什麼?非常感謝!!

更新:我想我發現至少有一個問題。讓我看看更多。

更新2:對不起,這段代碼實際上起作用,至少是第一種方法。代碼片段周圍出現了一個微妙的錯誤,導致代碼無法正常工作,但總的來說這很好。異步調用有時有點棘手:-)

回答

2
+0

是的,但 「depricated」 並不意味着 「不工作」。如果我直接調用URL,我會得到結果。 – MarkT 2012-03-17 00:51:52

+0

@MarkT真的,但它會停留一天。而且,用'callback =?'我得到一個錯誤。如果'callback =?'被移除或被賦予了一個像'callback = foo'的值,它就可以工作。如果你將一個值附加到'callback',它應該包含在問題中。 – 2012-03-17 00:57:28

+0

這不是JSONP如何使用JSONP。 JQuery替換回調=?與回調= MarkT 2012-03-17 01:09:34

5

檢查了這一點JsFIddleDemo

/* 
    * create callbak function for jsonP 
    * @params 
    * data is response from http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=AAA&callback=myjsonpfunction 
    */ 
     function myjsonpfunction(data){ 
      alert(data.responseData.results) //showing results data 
      $.each(data.responseData.results,function(i,rows){ 
       alert(rows.url); //showing results url 
      }); 
     } 

    //request data using jsonP 
    $(function(){ 
     $.ajax({ 
     url:'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=AAA&callback=myjsonpfunction', 
     type:"GET", 
     dataType: 'jsonp', 
     jsonp: 'myjsonpfunction', 
     async:'true', 
     success:function (data) { 
      //alert("success"); 
      } 
     }); 
     }); 

你需要編寫一個回調參數和回調函數,如果你沒有設置回調,那麼google ajax apis將只返回json。

,如果你設置的URL這樣

http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=AAA&callback=?(another) 

的響應

{"responseData": null, "responseDetails": "bad or missing callback or context", "responseStatus": 400}