0

我尝试使用这个 jQuery 脚本调用 bit.ly API:

$.get('http://api.bit.ly/shorten?login=bitlyapidemo&apiKey=R_0da49e0a9118ff35f52f629d2d71bf07&version=2.0.1&longUrl=www.wordpress.com', function(data) {
    alert(data);
});

但萤火虫说“405 方法不允许”。怎么了?非常感谢。

4

5 回答 5

6

如前所述,标准 AJAX 调用不能跨域工作。只需将 JSONP 与 $.getJSON() 一起使用即可。

以下是如何使用 Bitly API 和 jQuery 获取缩短 URL 的示例:

function get_short_url(long_url, login, api_key, func)
{
    $.getJSON(
        "http://api.bitly.com/v3/shorten?callback=?", 
        { 
            "format": "json",
            "apiKey": api_key,
            "login": login,
            "longUrl": long_url
        },
        function(response)
        {
            func(response.data.url);
        }
    );
}

以下代码可用于获取短 URL:

/*
Sign up for Bitly account at
 https://bitly.com/a/sign_up

and upon completion visit
https://bitly.com/a/your_api_key/ 
to get "login" and "api_key" values
*/
var login = "LOGIN_HERE";
var api_key = "API_KEY_HERE";
var long_url = "http://www.kozlenko.info";

get_short_url(long_url, login, api_key, function(short_url) {
    console.log(short_url);
});
于 2011-08-10T04:24:57.297 回答
3

$.get不支持跨域 GET。

您可以使用JSONP技术,并且$.getJSON.

顺便说一句,http://应该在longUrlbit.ly API 调用的参数中。但这不是主要问题。

于 2010-01-02T18:33:10.303 回答
1

您看到 405 错误的原因是您违反了Same Origin Policy,这会阻止从不同的域、子域或协议中检索数据。

于 2011-08-10T04:29:12.830 回答
0

URL 无效。

您必须将http://longUrl 参数放在前面。

编辑

一些澄清:

这个网址http://api.bit.ly/shorten?login=bitlyapidemo&apiKey=R_0da49e0a9118ff35f52f629d2d71bf07&version=2.0.1&longUrl=http://www.wordpress.com返回

{ "errorCode": 0, "errorMessage": "", "results": { "www.wordpress.com": { "errorCode": 1206, "errorMessage": "URL you tried to shorten was invalid.", "statusCode": "ERROR" } }, "statusCode": "OK" }

这个:http ://api.bit.ly/shorten?login=bitlyapidemo&apiKey=R_0da49e0a9118ff35f52f629d2d71bf07&version=2.0.1&longUrl=http://www.wordpress.com返回

{ "errorCode": 0, "errorMessage": "", "results": { "http://www.wordpress.com": { "hash": "j1IP3", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/6i1NkN", "userHash": "6i1NkN" } }, "statusCode": "OK" }
于 2010-01-02T18:30:24.570 回答
-1

他们可能期望 POST 请求而不是 GET。

于 2010-01-02T18:26:11.550 回答