gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:30:03 25 4
gpt4 key购买 nike

我有这个基本设置:

  • 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.1Host: localhost:6112User-Agent: (is it weird that I feel weird about posting my User-Agent string?)Accept: text/html, application/xhtml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.7Keep-Alive: 115Connection: keep-aliveSuccessful response:HTTP/1.1 200 OKHost: localhostContent-Type: text/plainContent-Length: 55
<html><head></head><body>Done and done.</body></html>

AJAX 请求 header :

GET /?test1=testa&test2=testb HTTP/1.1Host: localhost:6112User-Agent: (UA string)Accept: text/plain, */*Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 115Connection: keep-aliveContent-Type: application/x-www-form-urlencodedReferer: localhost/cgi-bin/runtime.cgiOrigin: localhostResulting response headers:HTTP/1.1 200 OKHost: localhostContent-Type: text/plainContent-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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com