web-dev-qa-db-fra.com

PHP L'appel Jquery Ajax lance net :: ERR_EMPTY_RESPONSE

J'ai le code JavaScript suivant dans la page. Lorsque l'appel ajax est effectué, je pouvais voir que la section d'inspection/débogage du navigateur génère une erreur net :: ERR_EMPTY_RESPONSE. Cela fonctionne bien dans l'environnement localhost mais jette au-dessus des erreurs de 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 pdateUsersData.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 cela soit dû à un en-tête avec des appels Expire ou à un bug dans la version Jquery 1.9.1? Je n'ai pas trouvé de telles erreurs lorsque nous étions des versions précédentes. De plus, ce code n'a pas été mis à jour depuis 5 mois et les erreurs de navigateur se glissent il y a quelque temps. Merci pour toute votre aide et votre soutien.

Modifier:

Status: Ce PROBLÈME n'est pas résolu jusqu'à présent. Jquery AJAX l'aide d'experts est nécessaire. N'importe qui, veuillez promouvoir cette question. De plus, 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 redirigé vers 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;

Est-ce que la dernière version de jquery est responsable de cette erreur LES EN-TÊTES PROVISOIRES SONT MONTRÉS.

27
webblover

Je crois que votre demande n'est pas classée comme une "demande simple" selon la spécification CORS:

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

puisque vous définissez un en-tête de réponse pour Content-Type: application/json.

Votre serveur devra donc gérer la demande de contrôle en amont, ce qui implique de définir des en-têtes supplémentaires sur la demande et la réponse pour que la demande CORS réussisse.

Voici un bon article sur ce que vous devez faire - consultez le bit sous "pas si simple":

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

4
Mister P

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ées. Ce problème est nouveau. Tout, même avec 3000 variables, était sans problème auparavant. Ce problème se produit pour moi à la fois dans chrome et firefox dans les versions récentes. Ce n'est pas une erreur côté serveur car j'ai configuré Apache pour faire revivre 1 million de variables de 30 Mo de données.

3

J'avais cette même erreur et j'ai pu la corriger en envoyant toutes les données que je dois traiter dans un tableau au serveur, puis en le faisant cracher le tableau mis à jour au client, de sorte qu'un seul AJAX est effectué.

Je n'ai pas pu déterminer la cause exacte de ce problème, mais je suis sûr que ce qui se passe est qu'une sorte de tampon se remplit à pleine capacité avec tous ces appels AJAX, provoquant le serveur pour fermer certaines de ces demandes.

J'espère que cela t'aides.

2
amorimluc

Cela peut donc se produire pour un certain nombre de raisons, quelle que soit la langue ou la technologie utilisée. J'ai rencontré cela avec des charges utiles extrêmement petites de 15 à 20 points de données envoyés dans les deux sens en utilisant angular. PHP, Jquery, Angular tous gèrent l'erreur) différemment, mais les résultats jusqu'à l'une des trois choses qui se produisent.

  1. Problèmes de latence ou de réseau, cela s'est produit sur des connexions extrêmement lentes, encore une fois cela pourrait être quelque chose à un mauvais routeur ou à une configuration de pare-feu incorrecte uniquement sur un réseau de merde, à des programmes comme avast qui mettent un proxy en place pour vous protéger contre les virus .

  2. Charge de serveur élevée, j'ai forcé un serveur à être à 100% du processeur des tests de résistance et cela se produira lors d'appels aléatoires car le serveur ne traite pas les demandes assez rapidement. C'est difficile à résoudre et c'est vraiment un problème de mise à l'échelle pour le système.

  3. D'énormes ensembles de données, de gros éléments étant envoyés que la réponse échoue, cela peut généralement être résolu en ajustant vos paramètres de délai d'attente sur le serveur Web que vous utilisez.

2
James

J'ai pu résoudre ce problème dans la plupart des cas avec une fonction simple que j'ai écrite pour vider/réinitialiser toute la mémoire poubelle et vider/réinitialiser la mémoire de sortie après toutes les boucles.

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

J'obtenais également la même erreur lors de l'utilisation de XMLHttpRequest ().

Cependant, j'ai pu résoudre l'erreur en désactivant la limite de mémoire pour le script côté serveur.

Pour cela, définissez memory_limit sur -1 dans le fichier php.ini. Par défaut, il est défini sur 128 Mo, vous pouvez donc également essayer d'augmenter la taille de la mémoire plutôt que de la désactiver complètement car cela peut prendre beaucoup de ressources du serveur.

0
Hasan Wajahat

J'ai trouvé le même problème en raison de mon problème de réseau, votre réseau peut également en être la cause.

0
user1752752