Javascript 如何使用Bitly V4 API和jQuery缩短URL

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 = { "

因此,我试图用新的V4 Bitly API缩短URL,但我得到了一个JSON错误

我的代码:

$(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);
    });
  });
});