【发布时间】:2012-10-24 05:34:44
【问题描述】:
我正在编写一个脚本,该脚本将简单的命令发布到嵌入在设备上的网络服务器。我不确定服务器到底是什么(我相信嵌入式 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 并将其直接放入浏览器窗口时,即使值中有空格,服务器也会完成它的工作。所以这个网址是从我的脚本发送的:
http://[ip]/setsetting/setting1=value 1
不起作用,但如果我将相同的 url 插入我的浏览器 (Chrome),它确实有效。 Chrome 会将空格更改为%20。我尝试格式化代码中的值以用%20 替换空格,但这没有帮助。我尝试将 $.ajax() 的 contentType 属性添加到其他内容中,但这些都没有帮助。
编辑:我刚刚注意到 $.ajax() 的错误函数正在触发。 e.responseText 是一个显示“400 - 错误请求”的 html 页面。嗯?
【问题讨论】:
-
所以基本上你只是在问浏览器如何格式化 URL 以及 jQuery 的不同之处。您可以查看 HTTP 标头以查看直接导航或 jQuery AJAX 调用的确切 HTTP GET 请求。 here's how.
-
谢谢!我认为这让我离弄清楚这一点更近了一步。
-
是同一域、子域和端口上的url?
标签: jquery ajax http embed content-type