如何解决 ajax 数据编码中带有斜杠的查询字符串问题?

how to solve querystring problem with slashes in ajax data encoding?

我尝试在 jquery 中使用 ajax 发送 GET 方法, 当数据有特定的字符串或字符时会出现问题。

我想在 jquery 查询中发送完整的 uri 路径。

我试过 URIEncode 或 URIDecode blah blah blah,但它真的不起作用。


my jsp file
====================================================================================

    $("#kakaoLogin").click(function() {

        var loginPage = "${login_page}";
        var urlStr = encodeURI("${login_page}");

        console.log(loginPage);
        console.log(urlStr);

        $.ajax({
            url: "${request_url}",
            data: { 
                client_id     : "${client_id}",
                login_page    : loginPage, // problem line
                response_type : "${response_type}"          
            },  
            method: "GET",   
            dataType: "json" 
        });

我的 google devtool 控制台的结果

(索引):20 http://localhost:8000/login

(索引):21 http://localhost:8000/login

jquery.min.js:5 GET https://kauth.kakao.com/oauth/token?client_id=a4166bb…&login_page=http%3A%2F%2Flocalhost%3A8000%2Flogin&response_type=代码 400(错误请求)

该死的怎么解决?

我怀疑这实际上与查询字符串编码有关。查询字符串中的斜线 应该 为 encoded/escaped,因此您应该希望当前行为继续,而不是改变。如果您查看 official demos 之一中使用的重定向路径,它们会完全编码查询字符串。

这些更有可能是您的问题:

A) 这似乎不是正确的端点(您正在尝试对 POST 端点进行 GET 以刷新令牌)。尝试登录并获取用户令牌的端点是 GET /oauth/authorize。参见 here

B) 即使这是正确的端点,也应该是 redirect_uri,而不是 login_page

C) 如果您确实是第一次尝试授权用户,OAuth 流程将要求登录 url (/oauth/authorize?client_id={app_key}&redirect_uri={redirect_uri}&response_type=code) 实际上在新选项卡中打开或弹出 window,因为如果用户未登录 Kakao,则需要将他们重定向到登录页面,然后才能批准/创建身份验证令牌。您可以在 this demo page.

上看到此功能

我会高度推荐通读 REST API 文档,here, and/or checking out their JS SDK - 它大大简化了身份验证过程,并且可以创建一个登录按钮几行代码。