通过JQuery JSONP调用Google Ajax搜索API

4

我知道这个问题已经被问了很多次,但我仍然无法让我的代码工作。我正在尝试从我的Javascript应用程序中进行简单的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个回答

5

请查看JsFiddleDemo来了解更多有关 IT 技术的信息。

    /*
     * 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");
          }
        });
      });

如果您不设置回调函数和回调参数,谷歌 AJAX API 将仅返回 JSON 数据。

如果您设置了以下 URL:

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

回应如下:

{"responseData": null, "responseDetails": "缺少回调函数或上下文出错", "responseStatus": 400}


3

是的,但“已弃用”并不意味着“不工作”。如果我直接调用URL,我会得到结果。 - MarkT
@MarkT 是的,但它总会停止。而且,使用callback=?会出现错误。如果删除callback=?或者给它一个值,比如callback=foo,那么它就可以工作了。如果你正在附加一个值到callback上,那么应该在问题中包含它。 - jk.
这不是 JQuery 使用 JSONP 的工作方式。JQuery将 callback=? 替换为 callback=<smth.>。 - MarkT
@MarkT 看起来它不是作为 JSONP 响应。看起来像是直接的 JSON。如果是这种情况,你遇到了同源策略违规问题。 - jk.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接