Javascript 如何使用Bitly V4 API和jQuery缩短URL
因此,我试图用新的V4 Bitly API缩短URL,但我得到了一个JSON错误 我的代码:Javascript 如何使用Bitly V4 API和jQuery缩短URL,javascript,jquery,api,Javascript,Jquery,Api,因此,我试图用新的V4 Bitly API缩短URL,但我得到了一个JSON错误 我的代码: $(function() { $(".createBitly").on("click", function(e) { e.preventDefault(); var url = $(this).attr("href"); var accessToken = "xxx"; var params = { "
$(function() {
$(".createBitly").on("click", function(e) {
e.preventDefault();
var url = $(this).attr("href");
var accessToken = "xxx";
var params = {
"long_url" : encodeURIComponent(url)
};
$.ajax({
url: "https://api-ssl.bitly.com/v4/bitlinks",
cache: false,
dataType: "json",
method: "POST",
contentType: "application/json",
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + accessToken);
},
data: params
}).done(function(data) {
console.log(data);
}).fail(function(data) {
console.error(data);
});
});
});
结果:422HTTP错误
"{"message":"UNPROCESSABLE_ENTITY","resource":"bitlinks","description":"The JSON value provided is invalid."}"
但是,使用CURL运行它确实有效:
我做错了什么?仅使用jQuery不可能吗
TIA。我根据您上面的代码进行了编辑,效果很好 1)
JSON.stringify
发送请求之前(将请求转换为JSON格式)
2) 不需要encodeURIComponent()
是否长url值必须是转义的JS字符串,而不是通过对其应用encodeURIComponent()进行编码?链接案例中的示例是{“long\u url”:“https:\/\/stackoverflow.com\/questions\/ask”}。这将是编码后的“https%3A%2F%2Fstackoverflow.com%2fsquestions%2Fask”。我假设Bitly想要找到斜杠以便处理URL。有趣的是,Bitly API文档说长url“必须”是uriencoded,但您链接到的示例中的答案使用json编码。是的,您似乎没有发送正确的json编码数据。我也尝试了escape(),运气不好。还尝试将“https:\/\/stackoverflow.com\/questions\/ask”作为字符串,也没有运气。
$(function() {
$(".createBitly").on("click", function(e) {
e.preventDefault();
var url = $(this).attr("href");
var accessToken = "token";
var params = {
"long_url" : url
};
$.ajax({
url: "https://api-ssl.bitly.com/v4/shorten",
cache: false,
dataType: "json",
method: "POST",
contentType: "application/json",
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + accessToken);
},
data: JSON.stringify(params)
}).done(function(data) {
console.log(data);
}).fail(function(data) {
console.log(data);
});
});
});