PHP Jquery Ajax 调用抛出 net::ERR_EMPTY_RESPONSE

2022-08-30 15:21:35

我在页面中有以下JavaScript代码。当进行ajax调用时,我可以看到浏览器检查/调试器部分抛出net::ERR_EMPTY_RESPONSE错误。它在本地主机环境中工作正常,但在生产中会引发上述错误。

在客户端代码中,

<script>
$(document).ready(function(){
    $("#identityLinks a").on("click", function(){
    value = $(this).attr("id");
    if(value != "")
    {
        $.ajax({
            url:  "publish/updateUsersData.php",
            type: "POST",
            data: {receiverId: value},
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            dataType: "json",
            success: function(data) {
              //alert(data["result"]);
              console.log(data["result"]);
            },
            error: function(xhr, textStatus, errorThrown) {
               //alert(xhr +" "+ textStatus +" "+errorThrown);
               console.log(xhr +" "+ textStatus);
            }
        });
    }
    });
</script>

在服务器端代码(PHP)中,我在updateUsersData中有以下代码.php:

<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jan 1996 00:00:00 GMT');
header('Content-type: application/json; charset=UTF-8');
if(isset($_POST["receiverId"]))
{
    $receiver_id = trim($_POST["receiverId"]);
    $arr = array("result"=>$receiver_id);
    echo json_encode($arr); die();
    break;
}
else
{
    $arr = array("result"=>"No user data received. Error!");
    echo json_encode($arr); die();
    break;
}
?>

你认为这是由于 Expire 调用的标题还是 Jquery 1.9.1 版本中的错误?当我们是以前的版本时,我没有发现这样的错误。此外,此代码已有5个月未更新,浏览器错误在一段时间前蔓延。感谢您的帮助和支持。

编辑:

状态 :此问题到目前为止尚未解决。需要Jquery AJAX专家的帮助。任何人,请推广这个问题。此外,CORS 不对此问题负责。

当单击发生上述错误的控制台时,我直接被带到

JQuery 1.9.1 where console error lines point to:

=> xhr.send( ( s.hasContent && s.data ) || null );

Also these ones are shown in console error mark:

=> transport.send( requestHeaders, done );

=> ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle 
   || handleObj.handler )
  .apply( matched.elem, args );

=> return typeof jQuery !== core_strundefined && 
(!e || jQuery.event.triggered !== e.type) ?
jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined;

是 jquery 最新版本负责此临时标头显示错误。


答案 1

我相信您的请求在 CORS 规范下未被归类为“简单请求”:

http://www.w3.org/TR/cors/#simple-cross-origin-request-0

因为您正在为内容类型设置响应标头:application/json。

因此,您的服务器将需要处理预检请求,这涉及在请求和响应上设置一些额外的标头,以使 CORS 请求成功

这是一篇关于你需要做什么的好文章 - 看看“不那么简单”下面的部分:

http://www.html5rocks.com/en/tutorials/cors/


答案 2

因此,无论使用何种语言或技术,这都有多种原因。我遇到过这种情况,使用角度资源来回发送15-20个数据点的极小有效载荷。PHP,Jquery,Angular都以不同的方式处理错误,但结果归结为三件事之一。

  1. 延迟或网络问题,我已经在极慢的连接上发生这种情况,再次这可能是对糟糕的路由器或不正确的防火墙配置到蹩脚网络上的任何事情,对于像avast这样的程序,这些程序将代理放在适当的位置以保护您免受病毒侵害。

  2. 高服务器负载,我通过压力测试强制服务器处于100%的CPU,这将在随机调用中发生,因为服务器处理请求的速度不够快。这很难解决,确实是系统的扩展问题。

  3. 巨大的数据集,发送响应失败的大型项目,通常可以通过在您正在使用的任何Web服务器上调整超时设置来修复。


推荐