PHP Jquery Ajax调用抛出net :: ERR_EMPTY_RESPONSE

时间:2014-03-09 15:28:00

标签: php jquery ajax google-chrome

我在页面中有以下JavaScript代码。当进行ajax调用时,我可以看到浏览器inspect / debugger部分抛出 net :: ERR_EMPTY_RESPONSE 错误。它在localhost环境中工作正常,但在生产中抛出错误。

在客户端代码中,

<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个月,浏览器错误刚刚发布。感谢您的所有帮助和支持。

修改

状态:到目前为止, ISSUE 尚未解决。 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最新版本负责此临时标题错误。

8 个答案:

答案 0 :(得分:4)

我认为您的请求不属于CORS规范下的“简单请求”:

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

因为您要为Content-Type设置响应标头:application / json。

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

这是一篇关于你需要做什么的好文章 - 请查看“不那么简单”下的内容:

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

答案 1 :(得分:3)

我的页面上有同样的问题 有时候 。 我认为这是因为变量的数量或它们有多大。 我有一个页面发送大约250个变量的json没有任何问题,但这个错误发生在这个页面,而大约1500个变量将被发送。这个问题很新。甚至有3000个变量的每件事都没有问题,之前。 在最近的版本中,我在chrome和firefox中都会出现此问题。 这不是服务器端错误,因为我已经配置了apache来恢复100万个30 Mb数据的变量。

答案 2 :(得分:2)

我遇到了同样的错误,并且能够通过将我需要处理的所有数据发送到服务器,然后让它将更新后的数据吐回客户端,以便只有一个AJAX调用来修复它是的。

我无法确定这个问题的确切原因,但我很确定发生了什么事情,某些缓冲区正在满足所有这些AJAX调用,导致服务器关闭一些这些要求。

希望这有帮助。

答案 3 :(得分:2)

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

  1. 延迟或网络问题,我已经在非常慢的连接上发生了这种情况,再次这可能是一个糟糕的路由器或不正确的防火墙配置,只是在一个糟糕的网络,到像avast这样的代理程序保护你免受病毒侵害的地方。

  2. 服务器负载很高,我强迫服务器在压力测试中处于100%cpu,这将在随机调用中发生,因为服务器没有足够快地处理请求。这很难解决,实际上是系统的扩展问题。

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

答案 4 :(得分:0)

由于我的网络问题,我发现了同样的问题,可能是您的网络也造成了这种情况。

答案 5 :(得分:0)

使用XMLHttpRequest()时,我也遇到了同样的错误。

但是我能够通过禁用服务器端脚本的内存限制来解决错误。

这是通过在php.ini文件中将memory_limit设置为-1来完成的。默认情况下,它设置为128M,因此您也可以尝试增加内存大小而不是完全禁用它,因为它可能需要大量服务器资源。

答案 6 :(得分:0)

在大多数情况下,我已经能够通过一个简单的函数解决这个问题,我写这个函数来转储/重置所有垃圾内存,并在任何/所有循环之后刷新/重置输出内存。

function memes(){
  ob_flush();
  ob_end_flush();
  gc_collect_cycles();
  ob_start();
  gc_enable();
}

答案 7 :(得分:0)

我有同样的问题。我尝试了许多解决方案建议,但没有任何效果。最后,我能够使用Ajax Get方法而不是post来解决此问题。但是,如果您不发送敏感数据,则更喜欢这样做。