【发布时间】:2011-04-19 09:03:28
【问题描述】:
我有这个基本设置:
- C 程序在特定未使用的端口(比如 1234)上打开一个套接字并等待,专门监听 HTTP 请求。
- 同一台机器上的网页,主要用 CGI 编写,使用 jQuery 发出针对 localhost:1234 的 AJAX 请求。
我希望 C 程序能够看到请求,从中获取一些数据,并以包含它自己的一些数据的简单 HTTP 响应进行响应。它工作一半:网页看到响应,读取正确的 HTTP 标头(通过 firebug 验证),但它没有得到响应数据。在 Wireshark 中打开它显示整个响应正在通过,标头和数据在一起,但 jQuery 似乎只是简单地忽略了数据本身。
jQuery 很简单:
$.ajax({ url: "http://localhost:6112",
data: {test1: 'testa', test2: 'testb'},
success: function(d,s,x) {
alert("Data: " + d);
alert("Status: " + s);
alert("Object: " + x);
},
error: function(xhr) {
alert("Error: " + xhr.status);
}
});
当我点击触发它的按钮时,请求就会发出; “数据:”框弹出空白;状态弹出为“成功”,并创建了一个对象。 'error' 函数不会被调用。
奇怪的是(对我来说,无论如何)如果我打开 Firefox 并将其指向localhost:1234,它会完全按照我的预期加载——C 程序响应的数据表明我没有发送任何数据; Firefox 可以很好地呈现它(特别是响应数据)。如果我 telnet 到那个端口并手动发送一个(看起来有点傻的)HTTP 请求,也会发生同样的事情。所以,据我所知,这一定是 jQuery 的一些时髦的东西,但我不知道它可能是什么!
我尝试将 AJAX 请求中的 dataType 参数设置为各种内容——text/html、text/plain;我什至尝试了 XML 并修改了 C 程序来发送它。不好——他们都做同样的事情。网页获取正确的 HTTP 标头,但没有数据。
我也找不到任何错误弹出; Firebug 没有抱怨。 C 程序没有抱怨......只是那些“非常安静地不工作”的错误之一。
各位,有什么想法吗?
编辑:按要求添加通过 Firefox 的实际请求
请求成功(如将 localhost:6112 扔进 URL 栏):
获取/HTTP/1.1 主机:本地主机:6112 User-Agent:(我对发布我的 User-Agent 字符串感到奇怪吗?) 接受:text/html, application/xhtml;q=0.9,*/*;q=0.8 接受语言:en-us,en;q=0.7 保活:115 连接:保持活动 成功响应: HTTP/1.1 200 正常 主机:本地主机 内容类型:文本/纯文本 内容长度:55<html><head></head><body>Done and done.</body></html>
AJAX 请求标头:
GET /?test1=testa&test2=testb HTTP/1.1 主机:本地主机:6112 用户代理:(UA 字符串) 接受:文本/纯文本,*/* 接受语言:en-us,en;q=0.5 接受编码:gzip,deflate 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7 保活:115 连接:保持活动 内容类型:application/x-www-form-urlencoded 参考:localhost/cgi-bin/runtime.cgi 来源:本地主机 产生的响应标头: HTTP/1.1 200 正常 主机:本地主机 内容类型:文本/纯文本 内容长度:55<html><head></head><body>Done and done.</body></html>
(注意:因为我是新手,所以我不得不裁剪一些超链接)
【问题讨论】:
-
你能发布失败的HTTP请求和成功的HTTP请求吗? (Firefox 实时 HTTP 标头)
-
尝试 .get (api.jquery.com/jQuery.get) 检索数据。这不会像 .ajax 那样进行数据解析。