Échec du chargement de la ressource: la requête a expiré sur Safari

Nous avons une application Web qui fonctionne correctement depuis plus d’un an sur la plupart des navigateurs. Récemment, nous avons découvert que cela ne fonctionnait pas très bien sur Safari .

De nombreuses actions aboutissent à l’erreur suivante: Failed to load resource: Request timed out . Ce qui est drôle, c’est que l’ action est effectivement exécutée correctement par la suite (la plupart du temps).

Lorsqu’on examine l’erreur, cela semble se produire lorsqu’il y a une demande ajax .

J’ai d’abord essayé de modifier le paramètre de délai d’attente ajax en procédant comme suit:

  $.ajax({ "type" : methode, "dataType" : "json", "url" : url, "async" : async, "data" : donneesEnvoyees, "timeout" : 60000 }) 

Cela n’a rien changé du tout, une erreur s’affiche après environ 10 secondes, ce qui est inférieur au délai d’attente défini.

Après avoir lu un peu d’Internet, j’ai trouvé une réponse à propos de la spécification No-Cache afin que Safari ne conserve pas les parameters de publication dans le cache. Je ne peux pas dire que je comprends tout à fait cela, mais j’ai quand même essayé la manière suivante:

 $.ajax({ "type" : methode, "headers" : { "cache-control": "no-cache" }, <-- added this line "dataType" : "json", "url" : url, "async" : async, "data" : donneesEnvoyees, "timeout" : 60000 }) 

Comme vous pouvez le deviner, j’ai toujours la même erreur.

Avez-vous une idée de ce qui se passe? Pourquoi cette erreur ne se produit-elle que sur Safari et pas sur d’autres navigateurs? Comment le réparer?

Définissez async: true sur vos parameters ajax. Cela obligera le navigateur à maintenir la connexion et à se fermer juste après avoir reçu la réponse.

J’ai le même problème. Fixé en ajoutant l’en-tête CORS et le code d’état de la réponse à 200

  res.header('Access-Control-Allow-Origin', '*'); res.status(200); 

Comment Pourquoi

Après avoir fouillé dans l’erreur en lisant le code source de jQuery, j’ai compris que le véritable problème est que XMLHttpRequest dans jQuery + Safari appelle onError avec un code d’état http 0 . J’ai donc ajouté des en-têtes CORS et lui ai atsortingbué un code de statut 200 pour résoudre le problème.

Je pense que votre problème sera résolu si vous supprimez dataType : "json" du code si le retour de votre page ajax n’est pas une chaîne JSON appropriée . J’ai remarqué que $.ajax() ne va pas à la fonction de succès si le type de dataType : "json" est fourni et que les données de retour ne sont pas du type JSON .

PS
Il y a certaines choses comme le type, dataType, url mots-clés de parameters AJAX type, dataType, url etc. ne sont pas supposés être entre guillemets. Même si le code fonctionnera même avec la méthode actuelle, la méthode appropriée est ce que j’ai mentionné.

 $.ajax({ type : methode, dataType : "json", url : url, async : async, data : donneesEnvoyees, timeout : 60000, success : function(data){ alert('success'); } }); 

Je suppose que vous avez ajouté une fonction de success avec cet appel ajax que vous pouvez utiliser pour utiliser différentes actions en fonction du résultat.