在Ajax URL中转义正斜杠/变量

时间:2017-10-25 02:25:09

标签: javascript jquery ajax

我正在使用现有代码,通过Ajax发送到给定的URL来验证用户的提交:

AuthGuard

然后通过ajax发送:

var url = '/foo/bar/' + valuea + '/' + valueb + '/' + valuec; 

问题在于用户输入包含正斜杠,例如:

$.ajax({ type : 'GET', url : url, // data : data, success : function(response) {... } });

然后,网址定义为:

valuec = ABC/DEF

这会产生完全不同的网址结构和404。

有没有办法可以转义此值以维护所需的网址结构?

我尝过了/far/bar/{valuea}/{valueb}/ABC/DEFreplace(/\//, '\/');之类的内容,但都没有帮助。

我目前的想法是将用户提交的数据中的任何'/'重写为其他内容(例如|)的解决方法,以便我可以将其解析为URL,然后在返回时重新调整它,但这有点像一个混乱的解决方案imho。

提前致谢

3 个答案:

答案 0 :(得分:2)

encodeURIComponent将有效。FIDDLE



valuea = 1;
valueb = 2;
valuec = "ABC/DEF";
var url = '/foo/bar/' + valuea + '/' + valueb + '/' + encodeURIComponent(valuec); 
document.write(url+'<br/>');
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以将值作为查询字符串参数传递

var url = "/foo/bar/?valuea=" + valuea + "&valueb=" + valueb + "&valuec=" + valuec; 

答案 2 :(得分:0)

感谢您的回复。不幸的是由于预先构建的限制,我无法修改URL结构,并且encodeURIComponent不起作用:

    $.ajax({
                type : 'GET',
                url  : url,

所以,我已经选择了替换方法......!

    valuec = valuec.replace(/\//g, '|||');   

因此它正确地解析了API,然后在那时我将它们交换回来。

干杯