PHP jquery Ajax call lance net:: ERR EMPTY RESPONSE
j'ai le code JavaScript suivant sur la page. Quand l'appel ajax est fait, je pourrais voir que la section inspection/débogueur du navigateur lance net:: ERR_EMPTY_RESPONSE erreur. Il fonctionne bien dans l'environnement localhost mais jette au-dessus de l'erreur dans la production.
Dans le code côté client,
<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>
Dans le code côté Serveur (PHP), j'ai le code suivant dans 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;
}
?>
pensez-vous que c'est à cause d'un en-tête avec Appels d'expiration ou un bug dans la version 1.9.1 de Jquery? Je n'ai pas trouvé de telles erreurs quand nous étions des versions précédentes. De plus, ce code n'a pas été mis à jour depuis 5 mois et des erreurs de navigateur se sont glissées il y a peu de temps. Merci pour votre aide et votre soutien.
Edit:
Statut: ISSUE n'est pas encore résolu. jQuery AJAX besoin d'aide d'experts. N'importe qui, s'il vous plaît promouvoir cette question. Aussi, CORS n'est pas responsable de ce problème.
en cliquant sur la console dans laquelle l'erreur ci-dessus s'est produite, j'ai été directement amené à cette ligne dans
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;
Is jquery la dernière version responsable de ces en-têtes provisoires sont affichés erreur.
7 réponses
je crois que votre demande n'est pas classé comme un "simple demande" en vertu de la SCRO spécifications:
http://www.w3.org/TR/cors/#simple-cross-origin-request-0
puisque vous définissez un en-tête de réponse pour Content-Type: application/json.
ainsi, votre serveur devra gérer la requête pré-vol, ce qui implique de définir quelques headers supplémentaires sur la requête et la réponse pour que la requête CORS soit réussie
Ici est un bon article sur ce que vous devez faire - découvrez le peu en dessous de "pas si simple":
j'ai le même problème sur ma page parfois. Je pense que cela se produit en raison du nombre de variables ou de leur taille. J'ai une page qui envoie un json d'environ 250 variables sans aucun problème, mais cette erreur se produit dans cette page, alors qu'environ 1500 variables doivent être envoyés. Ce problème est nouveau. Tout, même avec 3000 variables, était sans problème, avant. Ce problème se produit pour moi en chrome et firefox dans les versions récentes. Ce n'est pas erreur du côté serveur parce que j'ai configuré apache pour relancer 1 million de variables de 30 Mo de données.
j'ai eu cette même erreur et j'ai pu la corriger en envoyant toutes les données que j'ai besoin de traiter dans un tableau au serveur, et en lui faisant ensuite cracher le tableau mis à jour au client, de sorte qu'un seul appel AJAX soit fait.
Je n'ai pas été en mesure de déterminer la cause exacte de ce problème, mais je suis assez sûr que ce qui se passe est qu'une sorte de tampon est rempli à pleine capacité avec tous ces appels AJAX, provoquant le serveur pour fermer certains de ces demande.
J'espère que cela vous aidera.
cela peut donc se produire pour un certain nombre de raisons, peu importe la langue ou la technologie utilisée. J'ai rencontré ceci avec des charges utiles extrêmement petites de 15-20 points de données étant envoyés en arrière et en avant en utilisant des ressources angulaires. PHP, Jquery, Angular gèrent tous l'erreur différemment mais les résultats à l'une des trois choses qui se passe.
problèmes de latence ou de réseau, j'ai eu ce cas sur des connexions extrêmement lentes, encore une fois cela pourrait être n'importe quoi pour un mauvais routeur ou une mauvaise configuration du pare-feu juste sur un réseau merdique, aux programmes comme avast qui mettent un proxy en place pour vous protéger des virus.
charge de serveur élevée, j'ai forcé un serveur à être à 100% cpu de stress tests et cela se produira sur les appels aléatoires parce que le serveur ne transmet pas les requêtes assez rapidement. C'est difficile à corriger et est vraiment un problème d'évolutivité du système.
D'énormes ensembles de données, de gros articles étant envoyés que la réponse échoue, Habituellement cela peut être corrigé en ajustant vos paramètres de timeout sur n'importe quel serveur web que vous utilisez.
j'ai trouvé le même problème à cause de mon problème de réseau, peut-être que votre réseau en est aussi la cause.
j'ai aussi eu la même erreur en utilisant XMLHttpRequest().
cependant j'ai pu résoudre l'erreur en désactivant la limite de mémoire pour le script côté serveur.
ceci est fait en définissant memory_limit à -1 dans le php.fichier ini. Par défaut, il est défini à 128M, donc vous pouvez également essayer d'augmenter la taille de la mémoire plutôt que de la désactiver complètement car il peut prendre beaucoup de ressources du serveur.
j'ai été capable de résoudre cela dans la plupart des cas avec une fonction simple que j'ai écrite pour décharger/réinitialiser toute la mémoire de rebut et rincer/réinitialiser la mémoire de sortie après n'importe quelle/toutes les boucles.
function memes(){
ob_flush();
ob_end_flush();
gc_collect_cycles();
ob_start();
gc_enable();
}