我在页面中有以下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最新版本负责此临时标题错误。
答案 0 :(得分:4)
我认为您的请求不属于CORS规范下的“简单请求”:
http://www.w3.org/TR/cors/#simple-cross-origin-request-0
因为您要为Content-Type设置响应标头:application / json。
因此,您的服务器需要处理预检请求,这涉及在请求和响应上设置一些额外的标头,以使CORS请求成功
这是一篇关于你需要做什么的好文章 - 请查看“不那么简单”下的内容:
答案 1 :(得分:3)
我的页面上有同样的问题 有时候 。 我认为这是因为变量的数量或它们有多大。 我有一个页面发送大约250个变量的json没有任何问题,但这个错误发生在这个页面,而大约1500个变量将被发送。这个问题很新。甚至有3000个变量的每件事都没有问题,之前。 在最近的版本中,我在chrome和firefox中都会出现此问题。 这不是服务器端错误,因为我已经配置了apache来恢复100万个30 Mb数据的变量。
答案 2 :(得分:2)
我遇到了同样的错误,并且能够通过将我需要处理的所有数据发送到服务器,然后让它将更新后的数据吐回客户端,以便只有一个AJAX调用来修复它是的。
我无法确定这个问题的确切原因,但我很确定发生了什么事情,某些缓冲区正在满足所有这些AJAX调用,导致服务器关闭一些这些要求。
希望这有帮助。
答案 3 :(得分:2)
因此,无论使用何种语言或技术,都会出现多种原因。我遇到过这种情况,使用角度资源来回发送15-20个数据点的极小负载。 PHP,Jquery,Angular都以不同的方式处理错误,但结果归结为三件事之一。
延迟或网络问题,我已经在非常慢的连接上发生了这种情况,再次这可能是一个糟糕的路由器或不正确的防火墙配置,只是在一个糟糕的网络,到像avast这样的代理程序保护你免受病毒侵害的地方。
服务器负载很高,我强迫服务器在压力测试中处于100%cpu,这将在随机调用中发生,因为服务器没有足够快地处理请求。这很难解决,实际上是系统的扩展问题。
大量数据集,响应失败时发送的大项目,通常可以通过调整您正在使用的任何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来解决此问题。但是,如果您不发送敏感数据,则更喜欢这样做。