jquery - 奇怪的 jQuery 问题 - 对 C 程序的 Ajax 请求不太工作

标签 jquery c ajax

我有这个基本设置:

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

我希望 C 程序能够查看请求,从中获取一些数据,并使用包含其自己的一些数据的简单 HTTP 响应进行响应。它半工作:网页看到响应,读取正确的 HTTP header (通过 firebug 验证这一点),但它没有获取响应数据。在 Wireshark 中打开它显示整个响应正在通过, header 和数据在一起,但 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 可以很好地呈现它(特别是响应数据)。如果我远程登录到该端口并手动发送一个(看起来有点傻的)HTTP 请求,也会发生同样的情况。所以,据我所知,这一定是 jQuery 发生的一些奇怪的事情,但我不知道它可能是什么!

我尝试将 AJAX 请求中的 dataType 参数设置为各种内容——text/html、text/plain;我什至尝试了 XML 并修改了 C 程序来发送它。不好——他们都做同样的事情。网页获取了正确的 HTTP header ,但没有数据。

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

各位有什么想法吗?

<小时/>

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

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

GET / HTTP/1.1
Host: localhost:6112
User-Agent: (is it weird that I feel weird about posting my User-Agent string?)
Accept: text/html, application/xhtml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.7
Keep-Alive: 115
Connection: keep-alive

Successful response:
HTTP/1.1 200 OK
Host: localhost
Content-Type: text/plain
Content-Length: 55
<html><head></head><body>Done and done.</body></html>

AJAX 请求 header :

GET /?test1=testa&test2=testb HTTP/1.1
Host: localhost:6112
User-Agent: (UA string)
Accept: 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
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Referer: localhost/cgi-bin/runtime.cgi
Origin: localhost

Resulting response headers:
HTTP/1.1 200 OK
Host: localhost
Content-Type: text/plain
Content-Length: 55
<html><head></head><body>Done and done.</body></html>

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

最佳答案

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

JSONP 是最简单的,它所做的基本上只是添加一个 <script>标记到您的<head>到 url,这将执行 GET 请求(所以再见 postdata)。你可以通过添加“callback=?”来让它调用 JavaScript 回调。 url 的 GET 参数 - 然后响应必须调用“callback”参数中指定的 javascript 方法。如果这是有道理的..

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

关于jquery - 奇怪的 jQuery 问题 - 对 C 程序的 Ajax 请求不太工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3831255/

相关文章:

javascript - 处理 AJAX 超时

php - 带有附加数据的 jQuery 文件上传

javascript - iOS5移动Safari : Handle HTML Input Text keyup/keydown with Voice Assistant?

jquery - 获取单独的 Bootstrap 工具提示

jquery - 在AngularJS中动态更改 Accordion 菜单的标题

jQuery 检查当前 url

javascript - 使用 NaCl 模块(C 代码)的 Chrome 扩展程序不会接受我的消息

c - 使用 C 覆盖数组中的字符

从 fortran 调用 C(ifort、gfortran)

asp.net - 通过 AJAX 加载 Web 应用程序内容