jQuery和Chrome HTTP请求之间的区别

时间:2012-11-03 22:39:36

标签: jquery ajax http embed content-type

我正在编写一个脚本,将简单命令发布到嵌入在设备上的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”。嗯?

2 个答案:

答案 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
    }
});

在这里,我们使用?来更好地界定查询字符串参数的开始位置。