PHP Jquery Ajax 호출이 net::ERR_EMPTY_RESPON
페이지에 다음과 같은 자바스크립트 코드가 있습니다.Ajax 호출이 이루어지면 브라우저 검사/디버거 섹션이 net::를 던지는 것을 볼 수 있었습니다.ERR_EMPTY_RESPON 오류입니다.로컬 호스트 환경에서는 정상적으로 작동하지만 운영에서는 오류가 발생하지 않습니다.
클라이언트 사이드 코드에서,
<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;
}
?>
만료 호출이 있는 헤더 때문이라고 생각하십니까, 아니면 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;
이 임시 헤더에 대한 최신 버전을 쿼리합니다. 오류가 표시됩니다.
저는 당신의 요청이 CORS 사양에 따라 "단순 요청"으로 분류되지 않는다고 생각합니다.
http://www.w3.org/TR/cors/ #cisco-cross-cross-request-0
Content-Type: application/json에 대한 응답 헤더를 설정하고 있기 때문입니다.
따라서 서버가 비행 전 요청을 처리해야 합니다. 이 요청과 응답 모두에 대한 헤더를 추가로 설정해야 CORS 요청이 성공할 수 있습니다.
다음은 여러분이 해야 할 일에 대한 좋은 기사입니다 - "그렇게 간단하지 않습니다" 아래의 비트를 확인하십시오.
http://www.html5rocks.com/en/tutorials/cors/
저는 가끔 제 페이지에 같은 문제가 있습니다.변수의 수나 크기 때문에 이런 일이 일어난다고 생각합니다.저는 250개 정도의 변수를 문제없이 json을 보내는 페이지가 있는데, 이 페이지에서 1500개 정도의 변수를 보내는 동안 이 오류가 발생합니다.이 문제는 새로운 문제입니다.이전에는 변수가 3000개라도 문제가 없었습니다.이 문제는 최근 버전의 크롬과 파이어폭스에서 모두 발생합니다.저는 30Mb 데이터의 100만 변수를 되살리도록 apache를 구성했기 때문에 서버 측 오류가 아닙니다.
따라서 이러한 현상은 사용되는 언어나 기술에 관계없이 여러 가지 이유로 발생할 수 있습니다.저는 각도 리소스를 사용하여 15-20개의 데이터 포인트가 전송되는 매우 작은 페이로드에서 이 문제를 경험했습니다.PHP, Jquery, Angular는 모두 다르게 오류를 처리하지만 결과는 세 가지 중 하나로 귀결됩니다.
대기 시간 또는 네트워크 문제, 매우 느린 연결에서 이런 일이 발생한 적이 있습니다. 다시 말하지만, 이는 바이러스로부터 사용자를 보호하기 위해 프록시를 설치하는 방대한 프로그램이나 불량한 네트워크에 대한 잘못된 라우터 또는 부적절한 방화벽 구성에 대한 모든 것일 수 있습니다.
높은 서버 부하로 인해 스트레스 테스트로 인해 서버가 100% CPU 상태가 되도록 강제로 설정했습니다. 서버가 요청을 충분히 빠르게 처리하지 않기 때문에 랜덤 호출에서 이러한 현상이 발생합니다.이 문제는 해결하기 어려우며 실제로 시스템의 확장 문제입니다.
대용량 데이터 세트, 응답이 실패하여 전송되는 대용량 항목, 일반적으로 사용 중인 웹 서버의 시간 초과 설정을 조정하여 이 문제를 해결할 수 있습니다.
동일한 오류가 발생하여 어레이에서 처리해야 하는 모든 데이터를 서버로 전송한 다음 업데이트된 어레이를 클라이언트로 다시 전송하여 AJAX 호출이 한 번만 이루어지도록 함으로써 문제를 해결할 수 있었습니다.
저는 이 문제의 정확한 원인을 파악하지는 못했지만, 어떤 종류의 버퍼가 모든 AJAX 호출로 가득 차서 서버가 일부 요청을 종료하는 것은 확실합니다.
이게 도움이 되길 바랍니다.
저도 최근에 AJAX XMLHttpRequest()를 함수로 사용하여 동일한 오류에 직면했습니다.
function sysAJAX(inUrl,inData){
return $.ajax({type:"POST", url: inUrl, data: inData, cache:false,timeout:0, success:function(feed){},error:function(XMLHttpRequest,textStatus,errorThrown){}});
}
저의 경우는 PHP의 서버 측면 문제였습니다.json_encode()에서 전송한 데이터가 너무 커서 PHP 메모리 제한을 초과했습니다.@Hasan Wawjahat이 제안한 것처럼 메모리 제한을 나에게 조정하는 것은 좋은 생각이 아니어서 json_encode에서 보낼 전체 데이터를 검토했고 이것이 문제를 해결했습니다.
저는 제 네트워크 문제로 인해 같은 문제를 발견했는데, 아마도 당신의 네트워크가 원인일 수도 있습니다.
XMLHttpRequest()를 사용하는 동안에도 동일한 오류가 발생했습니다.
하지만 서버 측에서 스크립트에 대한 메모리 제한을 해제하여 오류를 해결할 수 있었습니다.
이 작업은 php.ini 파일에서 memory_limit을 -1로 설정하여 수행합니다.기본적으로 128M으로 설정되어 있으므로 서버의 리소스가 많이 필요하므로 메모리 크기를 완전히 비활성화하지 않고 늘릴 수도 있습니다.
대부분의 경우 모든 가비지 메모리를 덤프/재설정하고 루프가 발생한 후 출력 메모리를 플러시/재설정하기 위해 작성한 간단한 기능으로 이 문제를 해결할 수 있었습니다.
function memes(){
ob_flush();
ob_end_flush();
gc_collect_cycles();
ob_start();
gc_enable();
}
저도 같은 문제가 있었어요.나는 많은 해결책 조언을 시도했지만 아무 것도 되지 않았습니다.마침내 저는 포스트 대신 Ajax Get 방법을 사용하여 이 문제를 해결할 수 있었습니다.하지만 중요한 데이터를 보내지 않는 경우에는 이 옵션을 선호합니다.
언급URL : https://stackoverflow.com/questions/22284111/php-jquery-ajax-call-throws-neterr-empty-response
'programing' 카테고리의 다른 글
출력 시 EPLUS 오류가 발생합니다.응답에 대한 XLSX (0) | 2023.08.09 |
---|---|
MySQL 구성 파일 위치 - redhat 리눅스 서버 (0) | 2023.08.09 |
MariaDB + Galera 노드 99% RAM 사용 (0) | 2023.08.09 |
PHP 표시 ???내가 mysql에서 히브리어를 보여줄 때 히브리어 대신에. (0) | 2023.08.09 |
자바스크립트나 jquery를 사용하여 HTML 페이지를 PDF로 저장할 수 있습니까? (0) | 2023.08.09 |