我有以下基本设置:
我想要的是让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的时髦之处,但我对它可能是什么感到茫然!
localhost:1234
我尝试将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>
(注意:因为我是新手,所以不得不裁剪其中一些超链接)
同一网站上的其他端口仍然违反XHR跨域策略。跨域工作的唯一方法是JSONP(不支持POST请求)或同一服务器上的代理Web服务。
JSONP是最简单的方法,它的作用基本上是在URL中添加一个<script>标记到您<head>的URL,这将执行GET请求(因此再见postdata)。您可以通过添加“ callback =?”来使其调用javascript回调。网址的GET参数- 然后,响应将不得不调用“回调”参数中命名的javascript方法。如果这样的话。
<script>
<head>
jQuery可能正在检测到它是一个远程URL并尝试使用JSONP,但是由于没有回调使它失败(并且也不会调用错误)。