一尘不染

奇数jQuery问题-对C程序的Ajax请求不太起作用

ajax

我有以下基本设置:

  • 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);
              }
});

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

奇怪的是(无论如何对我而言),如果我打开Firefox并将其指向localhost:1234,它将完全按照我的期望进行加载-
C程序会响应数据,表明我未发送任何数据。Firefox很好地呈现了它(特别是响应数据)。如果我通过telnet到该端口并手动发送一个(看上去很傻)HTTP请求,也会发生同样的事情。因此,据我所知,这一定是jQuery的时髦之处,但我对它可能是什么感到茫然!

我尝试将AJAX请求中的dataType参数设置为各种内容-text / html,text / plain;
我什至尝试使用XML并修改了C程序以将其发送出去。不好-他们都做同样的事情。该网页获取正确的HTTP标头,但没有数据。

我也没有发现任何弹出的错误;Firebug没有抱怨;C程序没有抱怨……只是那些“非常安静地不起作用”的错误之一。

大家有什么想法吗?


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

成功的请求(例如,将localhost:6112扔到URL栏中):

GET / HTTP / 1.1
主机:localhost: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 OK
主机:localhost
内容类型:文本/纯文本
内容长度:55



<html><head></head><body>Done and done.</body></html>

AJAX请求标头:

GET /?test1 = testa&test2 = testb HTTP / 1.1
主机:localhost:6112
用户代理:(UA字符串)
接受:文本/纯文本,* / *
接受语言:en-us,en; q = 0.5
接受编码:gzip,放气
接受字符集: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 OK
主机:localhost
内容类型:文本/纯文本
内容长度:55



<html><head></head><body>Done and done.</body></html>

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


阅读 316

收藏
2020-07-26

共1个答案

一尘不染

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

JSONP是最简单的方法,它的作用基本上是在URL中添加一个<script>标记到您<head>的URL,这将执行GET请求(因此再见postdata)。您可以通过添加“
callback =?”来使其调用javascript回调。网址的GET参数-
然后,响应将不得不调用“回调”参数中命名的javascript方法。如果这样的话。

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

2020-07-26