jQuery和Google URL Shortener API

smo*_*izs 6 javascript jquery

我正在尝试使用http://goo.gl带有以下jQuery函数的API 来缩短URL

$.ajax({
        url: 'https://www.googleapis.com/urlshortener/v1/url?key=MY_API_KEY',
        crossDomain: true,
        type: 'POST',
        contentType: 'application/json',
        data: '{longUrl:"'+encodeURI(url)+'"}',
        dataType: 'jsonp',
        success: function(e) {
            alert(JSON.stringify(e));
        }
     });
Run Code Online (Sandbox Code Playgroud)

我在JSON中收到以下错误:

{"error":{"errors":[{"domain":"global","reason":"required","message":"Required parameter: shortUrl","locationType":"parameter","location":"shortUrl"}],"code":400,"message":"Required parameter: shortUrl"}}
Run Code Online (Sandbox Code Playgroud)

为什么要求短网址?我究竟做错了什么?

Ale*_*pin 6

您无法在JavaScript中执行跨域POST.当你提到crossDomain为true而dataType为jsonp是jsonp请求时,jQuery实际上做了什么,这只是一个使用标记从另一个服务器获取数据的hack.你得到了这个错误,因为它就好像你刚刚在没有参数的API页面上完成了一个GET requets.另一台服务器需要知道这一点并需要支持它.

Goo.gl API页面根本没有提到jsonp,这让我相信它不支持它.你最好的选择是在PHP中编写代理来为你做requets并返回结果,然后对该PHP文件进行Ajax调用.

编辑:如果是Chrome扩展程序,您可以使用特殊的Chrome方法执行跨域Ajax调用,以获取传递给Ajax对象的URL.您还需要将远程URL添加到扩展清单文件,如此处所述.