Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用包含'+';_Javascript_Urlencode_X Www Form Urlencoded - Fatal编程技术网

Javascript 使用包含'+';

Javascript 使用包含'+';,javascript,urlencode,x-www-form-urlencoded,Javascript,Urlencode,X Www Form Urlencoded,从应用程序中使用的API创建指向URL的重定向时遇到问题。我请求重定向URL中使用的会话令牌,但当令牌中包含+时,我遇到问题。我的猜测是,浏览器将其作为一个空格而不是一个实际的令牌字符,这导致重定向经常失败 下面是一个可以从API请求返回的示例令牌:1w5OX65MRj+3J9R5AXjMWQLAAXIo5TXa 查看“网络”选项卡,我看到它尝试使用此令牌请求重定向: 1w5OX65MRj 3J9R5AXjMWQLAAXIo5TXa,这就是它导致问题的原因 我尝试用%2B替换+,但我的应用程序似

从应用程序中使用的API创建指向URL的重定向时遇到问题。我请求重定向URL中使用的
会话令牌
,但当令牌中包含
+
时,我遇到问题。我的猜测是,浏览器将其作为一个
空格
而不是一个实际的令牌字符,这导致重定向经常失败

下面是一个可以从API请求返回的示例令牌:
1w5OX65MRj+3J9R5AXjMWQLAAXIo5TXa

查看“网络”选项卡,我看到它尝试使用此令牌请求重定向:
1w5OX65MRj 3J9R5AXjMWQLAAXIo5TXa
,这就是它导致问题的原因

我尝试用
%2B
替换
+
,但我的应用程序似乎根本没有替换它,这对我来说有点奇怪

这是我的密码:

let token = "";

        $.get('/_token_req', {contentType: "application/x-www-form-urlencoded"}, (response) => {
            //console.log(response);
            token = response;
            token = token.replace(/\+/g, "%2B");  // this doesn't replace the + character for some reason

            $.get('/_redirect', {token: response}, (response) => {
                //console.log(response);
                if(response == "OK"){
                    window.location.href = "https://someapi/payments/?auth_token=" + token;
                }
            })
        })

我对URL编码知之甚少,但如果有人能给我指出正确的方向,那将非常有帮助。谢谢

您的代码有两个问题:

您需要使用
encodeURIComponent
对令牌中的任何符号进行编码,以便以适当的方式发送

第二,在调用第二个请求
$.get('/_redirect'
)时,您没有使用
replace
d令牌,而是使用从先前请求中收到的简单
响应

将代码更改为此以消除这两个错误:

let token=”“;
$.get('/_token_req',{contentType:“application/x-www-form-urlencoded”},(response)=>{
令牌=编码组件(响应);
$.get('/_redirect',{token:token},(response)=>{
如果(响应=“确定”){
window.location.href=”https://someapi/payments/?auth_token=“+代币;
}
})
})

呃,
%2B
是一个
+
的十六进制。但是
+
是url中一个空格的替代物,它是一个
%20
十六进制。@Taplar所以我应该使用
%20
来代替它??我希望是这样。@Taplar我会尝试一下。@Taplar即使这样替换它,看起来仍然是b在“网络”选项卡中被视为一个空格。它在URL中正确地替换了它,但在使用它重定向时仍然像以前一样处理它。我将对此进行一次尝试。