在Windows Chrome 38(可能还有其他浏览器)中,XMLHttpRequest似乎会自动编码网址,但它会先删除尾随空格:
var x = new XMLHttpRequest();
x.open('GET', 'http://example.com/a?b= c d '); // note three spaces
x.send();
在控制台中运行该代码会产生:
获取http://example.com/a?b=%20c%20d 404(未找到)
尾随空格已被剥离,然后该URL已被编码。
我希望它对尾随空格进行编码而不用剥离它。
答案 0 :(得分:3)
这种行为记录在哪里?
XHR
's open
method使用basic url parser解析其URL参数,在其第一步中,从其输入中删除前导和尾随空格。
我应该在调用XHR.open()之前自己编码URL吗?
是。只需在其上使用encodeURI
:
var x = new XMLHttpRequest();
x.open('GET', encodeURI('http://example.com/a?b= c d '));
x.send();
但是也要考虑从头开始摆脱这个无效的url字符串,即在构造字符串之前。我不确定从哪里获取参数值,但它看起来像
x.open('GET', 'http://example.com/a?b='+encodeURIComponent(…));
答案 1 :(得分:0)
在this document中名为“基本URL解析器”的部分下,您可以看到删除前导和尾随空格的引用。该文档由此XMLHttpRequest document引用,其中描述了open()
。
您可以在调用open()
之前自行编码网址来解决此问题,因为您提供给open()
的网址应该是合法网址,而空格不是合法的网址字符。该编码还将处理前导和尾随空格的删除(因为不再有空格)。