有人请帮我解决这个jQuery bit.ly URL shortener。代码如下:
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"})
有人可以帮忙。
答案 0 :(得分:2)
你有
data:{longUrl:urlMatch,apiKey:key,login:username},
如果jsonp与json类似,那么你的数据参数形成不正确:
data:"{'longUrl':" + urlMatch + ",'apiKey':" + key + ",'login':" + username + "}",
以上代码未经过测试,但应该类似。
答案 1 :(得分:1)
这:urlMatch = $(this).val();
会将按钮文本输入urlMatch,这是你想要的吗?
此外,回调上的return
将无法访问该函数,因为ajax()
是一个异步函数。要使其同步,请将async:false
添加到ajax()
参数。
并且return
也无法正常工作,因此您必须将结果分配给全局变量。
但最好的方法是将return shortUrl;
替换为$('#menu').html(shortUrl);
,因为这是您正在寻找的结果。而且您不需要async:false
,这将阻止您的代码并暂时锁定浏览器。
如果全部失败,请尝试在查询字符串本身上传递参数。您可能需要take a look at this。
答案 2 :(得分:0)
在“var urlMatch = urlMatch”
之后,你错过了一个分号