如何解决 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 - 它大大简化了身份验证过程,并且可以创建一个登录按钮几行代码。
我尝试在 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 - 它大大简化了身份验证过程,并且可以创建一个登录按钮几行代码。