1

我正在编写一个脚本,该脚本将简单的命令发布到嵌入在设备上的 Web 服务器。我不确定服务器到底是什么(我相信嵌入式 Linux 上的某种 Apache 风格),这对于我的要求无关紧要。

$.ajax()服务器上的代码对 jQuery函数发送的 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。我尝试将 contentType 属性添加$.ajax()到其他事物中,但这些都没有帮助。

编辑:我刚刚注意到 $.ajax() 的错误函数正在触发。e.responseText 是一个显示“400 - 错误请求”的 html 页面。嗯?

4

2 回答 2

0

只使用 encodeURIComponent 函数怎么样?它会自动将所有特殊符号转换为 url 友好格式。

encodeURI(url) 用于整个 url,encodeURIComponent 用于编写 url "http://example/?someValue=" + encodeURIComponent(someValue)

于 2012-11-03T22:46:02.933 回答
-1

Try this:

$.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
    }
});

Here we use the ? to better delimitate where your query strings parameters begin.

于 2012-11-03T22:47:12.377 回答