为什么我不能使用jQuery的$ .get函数从JavaScript调用bit.ly API?

时间:2010-01-02 18:13:10

标签: javascript jquery api bit.ly

我尝试使用这个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);
});

但是firebug说“405方法不允许”。怎么了?非常感谢。

5 个答案:

答案 0 :(得分:6)

如前所述,标准的AJAX调用不适用于跨域。只需使用带有$ .getJSON()的JSONP。

以下是如何使用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);
        }
    );
}

以下代码可用于获取简短的网址:

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

答案 1 :(得分:3)

$.get不支持跨域GET。

您可以使用JSONP技术和$.getJSON

BTW,http://应该在bit.ly API调用的longUrl参数中。但这不是主要问题。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

网址无效。

您必须将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" }

答案 4 :(得分:-1)

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