奇怪的jQuery问题 – 对C程序的Ajax请求不太正常

我有这个基本设置:

  • C程序在特定的未使用端口(例如1234)上打开一个套接字并等待,专门监听HTTP请求。
  • 主要在CGI中编写的同一台机器上的网页使用jQuery来生成针对localhost:1234的AJAX请求。

我想要的是C程序查看请求,从中获取一些数据,并使用包含自己的一些数据的简单HTTP响应进行响应。 这是半工作:网页看到响应,读取正确的HTTP标头(通过firebugvalidation),但它没有获得响应数据。 在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); } }); 

当我点击触发该按钮的按钮时,会发出请求; “数据:”框弹出空白; 状态弹出为“成功”,并创建一个对象。 “错误”function不会被调用。

有什么奇怪的(对我而言)是,如果我打开Firefox并将其指向localhost:1234 ,它会按照我的预期完全加载 – C程序会响应数据,表明我没有发送数据; Firefox渲染它(特别是响应数据)就好了。 如果我telnet到该端口并手动发送(有点傻看)HTTP请求,也会发生同样的事情。 所以,据我所知,这必须是jQuery的一个时髦的东西,但我不知道它可能是什么!

我已经尝试将AJAX请求中的dataType参数设置为各种东西 – text / html,text / plain; 我甚至尝试过XML并修改了C程序来发送它。 没有好处 – 他们都做同样的事情。 网页获取正确的HTTP标头,但没有数据。

我也找不到任何错误; 萤火虫没有抱怨; C程序没有抱怨……只是其中一个“非常默默无法工作”的错误。

任何想法,伙计们?


编辑:根据要求添加通过Firefox的实际请求

成功的请求(例如,只需将localhost:6112放入URL栏):

 GET / HTTP / 1.1
主持人:localhost:6112
用户代理:(发布用户代理字符串后,我觉得很奇怪吗?)
接受:text / html,application / xhtml; q = 0.9,* / *; q = 0.8
 Accept-Language:en-us,en; q = 0.7
保持活力:115
连接:保持活力

成功回复:
 HTTP / 1.1 200好的
主持人:localhost
 Content-Type:text / plain
内容长度:55
 Done and done. 

AJAX请求标头:

 GET /?test1 = testa&test2 = testb HTTP / 1.1
主持人:localhost:6112
用户代理:(UA字符串)
接受:text / plain,* / *
 Accept-Language:en-us,en; q = 0.5
 Accept-Encoding:gzip,deflate
 Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.7
保持活力:115
连接:保持活力
内容类型:application / x-www-form-urlencoded
 Referer:localhost / cgi-bin / runtime.cgi
来源:localhost

产生的响应标头:
 HTTP / 1.1 200好的
主持人:localhost
 Content-Type:text / plain
内容长度:55
 Done and done. 

(注意:因为我是新手,我不得不裁剪一些超链接)

同一网站上的其他端口仍违反XHR跨域策略。 它可以跨域工作的唯一方法是JSONP(不支持POST请求)或同一服务器上的代理Web服务。

JSONP是最简单的,它的作用基本上只是将标签添加到你的到url,这将执行GET请求(所以再见postdata)。 你可以通过添加“callback =?”来调用javascript回调。 GET参数到url - 然后响应必须调用'callback'参数中命名的javascript方法。 如果这是有道理的..

jQuery可能检测到它是一个远程URL并尝试使用JSONP,但由于没有回调使其失败(并且也没有调用错误)。

Interesting Posts