我正在编写一个脚本,将简单命令发布到嵌入在设备上的Web服务器。我不确定服务器究竟是什么(我相信嵌入式Linux上有一些Apache的味道),这对我要问的问题无关紧要。
服务器上的代码对从jQuery的$.ajax()
函数发送的URL以及从Chrome发送的完全相同的URL做出的反应不同。我正试图找到一种方法来弄清楚Chrome正在做什么,jQuery不是为了让我的javascript工作。
详细说明:
当我发布到设备发送命令时,我这样做:
$.ajax({
type: "GET",
url: urlPrefix+'/setsetting/'+name+'='+value,
success: function(r) {
//command was sent
},
error: function(e) {
//some http error
}
});
当我发出一个值不包含空格的请求时,服务器正常工作。但是,当我发出值包含空格的请求时,服务器不会执行它的工作。因此,服务器上的代码如何处理URL中的空格显然存在问题,对吧?这是奇怪的事情:当我使用这段代码构造的URL并将其直接放入我的浏览器窗口时,即使值中有空格,服务器也能完成它的工作。所以这个URL是从我的脚本发送的:
http://[ip]/setsetting/setting1=value 1
不起作用,但如果我将同一个网址插入我的浏览器(Chrome),它确实有效。 Chrome会将空间更改为%20
。我已经尝试格式化我的代码中的值以用%20
替换空格,这没有用。我已经尝试将$.ajax()
的contentType属性添加到其他内容中,但这些都没有帮助。
编辑:我刚注意到$ .ajax()的错误函数正在触发。 e.responseText是一个html页面,上面写着“400 - Bad Request”。嗯?
答案 0 :(得分:0)
使用encodeURIComponent函数怎么样?它会自动将所有特殊符号转换为url友好格式。
encodeURI(url)用于整个网址 并且在编写网址时使用encodeURIComponent “http:// example /?someValue =”+ encodeURIComponent(someValue)
答案 1 :(得分:-1)
试试这个:
$.ajax({
type: "GET",
url: urlPrefix+'/setsetting/?'+name+'='+value, //Note the use of '?'
data:
success: function(r) {
//command was sent
},
error: function(e) {
//some http error
}
});
在这里,我们使用?
来更好地界定查询字符串参数的开始位置。