4

有人可以帮我使用这个 jQuery bit.ly URL 缩短器吗?

代码如下:

function shortenUrl(urlMatch)
{
    var urlMatch = urlMatch
    var username="myusername";
    var key = 'R_897b82b73568ea74fffbafa5a7b846d';
    $.ajax({
        url:"http://api.bit.ly/v3/shorten",
        data:{longUrl:urlMatch,apiKey:key,login:username},
        dataType:"jsonp",
        success:function(v)
        {
            var shortUrl=v.data.url;
            return shortUrl;
        }
    });
}

$('button').click(function(){
    var urlMatch = $(this).val();
    var newUrl = shortenUrl(urlMatch);
    $('#menu').html(newUrl);
});

每当我运行脚本时,它都会在控制台中返回此代码:

jsonp1304728172115({ data : [ ] , "status_code" : 500, "status_txt": "missing_arg_uri"})
4

3 回答 3

2

你有

data:{longUrl:urlMatch,apiKey:key,login:username},

如果 jsonp 类似于 json,那么您的数据参数格式不正确:

data:"{'longUrl':" + urlMatch + ",'apiKey':" + key + ",'login':" + username + "}",

上面的代码没有经过测试,但应该是类似的。

于 2011-05-07T01:41:27.267 回答
1

This:urlMatch = $(this).val();将按钮文本放入 urlMatch,这是你想要的吗?

另外,returnon 回调不会到达函数,因为ajax()是一个异步函数。要使其同步,请添加async:false参数ajax()

并且return不能正常工作,因此您必须将结果分配给全局变量。

但最好的方法是替换return shortUrl;$('#menu').html(shortUrl);,因为这是您正在寻找的结果。而且您不需要这样做async:false,这将阻止您的代码并暂时锁定浏览器。

如果全部失败,请尝试在查询字符串本身上传递参数。你可能想看看这个

于 2011-05-07T00:40:05.630 回答
0

您在“var urlMatch = urlMatch”之后缺少一个分号

于 2013-09-05T05:03:00.710 回答