jQuery post 返回空响应

Posted

技术标签:

【中文标题】jQuery post 返回空响应【英文标题】:jQuery post returns empty response 【发布时间】:2021-09-09 22:11:51 【问题描述】:

上周我遇到了一个大问题,我似乎无法找到解决方案。

我正在尝试将一些原始 XML 发布到另一家公司为我们开发的服务器,我认为该服务器具有接收此 XML 输入的侦听器。我发布和发送信息很好,但我没有得到任何回复(就像我在高中时喜欢的每个女孩一样......)。

我从 Chrome 得到的错误是:>POST http://xx.xxx.xxx.xxx:xxxx/SLISMESSAGE net::ERR_EMPTY_RESPONSE 我也尝试过其他浏览器,但所有浏览器都一样,除了 Firefox 给我一个 CORS 错误。

当我在服务器上发布监听器时,只会说:获取请求/SLISMESSAGE。

var template = [
            '<?xml version="1.0"?><request type="create-order"><PATIENT><CODE><?CODE?></CODE><DEPARTURE_DATE><?DEPARTURE_DATE?></DEPARTURE_DATE><LASTNAME><?LASTNAME?></LASTNAME><FIRSTNAME><?FIRSTNAME?></FIRSTNAME><BIRTHDAY><?BIRTHDAY?></BIRTHDAY><SEX><?SEX?></SEX><PHONE1><?PHONE1?></PHONE1><EMAIL><?EMAIL?></EMAIL><HOTEL><?HOTEL?></HOTEL><HOTELNO><?HOTELNO?></HOTELNO></PATIENT><ORDER><ORDERNO><?ORDERNO?></ORDERNO><ORDERDATE><?ORDERDATE?></ORDERDATE><ORDERTIME><?ORDERTIME?></ORDERTIME><SENDERCODE><?SENDERCODE?></SENDERCODE></ORDER><TESTS><TEST><?TEST?></TEST></TESTS></request>'
            ].join('\r\n');

            function update() 
                var len = 10;
                var randomId = parseInt((Math.random() * 9 + 1) * Math.pow(10,len-1), 10);
                //console.log(randomId.toString());
                
                var variables = 
                    'CODE': $('input[name="wpforms[fields][25]"]').val(),//randomId.toString(),
                    'DEPARTURE_DATE':$('input[name="wpforms[fields][3][date]"]').val(),
                    'DEPARTURE_TIME':$('input[name="wpforms[fields][3][time]"]').val(),
                    'LASTNAME': $('input[name="wpforms[fields][6][last]"]').val(),
                    'FIRSTNAME': $('input[name="wpforms[fields][6][first]"]').val(),
                    'BIRTHDAY': $('input[name="BIRTHDAY"]').val(),
                    'SEX': $('input[name="wpforms[fields][9]"]').val(),
                    'PHONE1': $('input[name="wpforms[fields][14]"]').val(),
                    'EMAIL': $('input[name="wpforms[fields][15]"]').val(),
                    'HOTEL': $('input[name="wpforms[fields][16]"]').val(),
                    'HOTELNO': $('input[name="wpforms[fields][17]"]').val(),
                    'TEST':$('input[name="wpforms[fields][2]"]').val(),
                    'ORDERNO':$('input[name="wpforms[fields][25]"]').val()
                ;

                var newXml = template.replace(/<\?(\w+)\?>/g,
                    function(match, name) 
                        return variables[name];
                    );
                console.log(newXml);
                var parsedNewXml = $.parseXML(newXml);
                //console.log(parsedNewXml);
                
                var order_num = document.getElementById("wpforms-1034-field_25")

                $.ajax(
                    url: "http://xx.xxx.xxx.xxx:8008/SLISMESSAGE", 
                    method: 'POST',
                    crossDomain: true,
                    cache: false,
                    async: true,
                    timeout:0,
                    data: newXml,
                    contentType: "application/xml",
                    dataType: "xml",
                    success : function()
                        console.log('XML Sent');
                        alert("Data sent");
                    ,
                    error : function (xhr, ajaxOptions, thrownError)  
                        console.log(xhr.status);          
                        console.log(thrownError);
                        console.log('HEYYYYYYYYYYYY');
                        alert(order_num);
                     
                ); 

问题是当我尝试从邮递员那里发布相同的 XML 时,我得到了响应。其中最奇怪的是,当我尝试使用 python 脚本发布时,我也得到了回复! ?????? 请注意,我在 JS 或 jQuery 方面不太擅长,我可能在这里确实缺少一些东西,但如果不是,那么 WTH?

我不知道该怎么办。在这一点上,我几乎要放弃了,即使将来会搞砸很多事情,但我不知道该怎么办......

Python Code

Response Time

Results of Python Code and JS jQuery

Python 是蓝色的 JS 是红色的

请注意,我在 JS 或 jQuery 方面不是那么擅长,我可能在这里确实缺少一些东西,但如果没有,那么 WTH?

我不知道该怎么办。在这一点上,我几乎要放弃了,即使将来会搞砸很多事情,但我不知道该怎么办......

【问题讨论】:

【参考方案1】:

这可能是 CORS 问题。如果您遇到 cors 错误,您可以在开发人员工具的控制台选项卡中查看。因为如果 cors 配置不正确,浏览器会阻止响应。当您从 Python 访问 api 时,不会发生 cors 问题,因为 cors 检查发生在浏览器中而不是 Python 中

【讨论】:

以上是关于jQuery post 返回空响应的主要内容,如果未能解决你的问题,请参考以下文章

在对 WebMethod 的 jQuery AJAX 调用中获取空响应,但 Web 方法返回 JSON

如何使用空实体返回响应状态 405?

从 Apache 返回空响应

jQuery AJAX GET/POST 请求在错误处理程序中返回 404,但从服务器发送了有效响应

Python post请求返回响应400

从 jQuery.Post 获取响应内容类型