【问题标题】:Difference between jQuery and Chrome HTTP requestsjQuery 和 Chrome HTTP 请求之间的区别
【发布时间】: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


【解决方案1】:

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

encodeURI(url) 用于整个 url 和 encodeURIComponent 在您撰写您的网址时使用 "http://example/?someValue=" + encodeURIComponent(someValue)

【讨论】:

  • 如果我对整个 url 这样做,它也会对 / 字符进行编码,所以没有爱。但是当我这样做只是为了重视 (url: '/setsetting/'+name+'='+encodeURIComponent(value),) 我也得不到爱。
【解决方案2】:

试试这个:

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

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

【讨论】:

  • 什么是“?”应该做的?只是说你应该在你的答案中包含它......如果这是查询字符串分隔符,远程代码将无法正确处理请求。
  • 要解释我的反对意见,请参阅我之前的评论。即使它确实有效,它也不会对空间做任何事情......
  • 马里奥,你错了,你不需要对$.ajax()函数的url字段进行encodeURIComponent(),因为jQuery已经自动完成了。
  • 对。我正在努力解决服务器代码对请求的反应方式,而不是具体的请求语法。如果我把 ?在 url 中,它不适用于我的脚本或浏览器。
  • @user1530115 我不明白你使用?的结果是什么
猜你喜欢
  • 2016-04-22
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 2016-10-02
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
相关资源
最近更新 更多