web-dev-qa-db-fra.com

NetworkError: échec de l'exécution de 'send' sur 'XMLHttpRequest'

J'essaie de faire une POST ajax à un serveur hébergé localement sur mon ordinateur portable mais je n'arrive pas à récupérer d'informations. Lorsque je clique sur un bouton de mon site (localhost) , Je peux voir le serveur renvoyer les informations correctes, mais sur le front-end, j'obtiens cette erreur:

erreur: NetworkError: échec d'exécution de 'send' sur 'XMLHttpRequest': échec de chargement ' http: // comp-ip '.

var param = JSON.stringify({varA:"varA",varB:"varB"});

$.ajax({
  type: "POST", 
  url: "http://comp-ip",
  async: false, 
  data: param,
  success: function(result, status, xhr){
    alert(result + ": " + status);
  },
  error: function(xhr, status, err) {
    alert(status + ": " + err);
  }
});

Il semble déclencher une erreur à chaque fois et non un "succès". Quelqu'un a une idée de ce qui ne va pas?

Edit: J'ai essayé d'envoyer une demande normale POST sans AJAX et cela me lance également une erreur "non définie":

$(document).ready(function(){
    var param = JSON.stringify({varA:"varA",varB:"varB"});
     $("#btn").click(function(event){
           $.post( 
              "http://ip",
               param,
               function(data) {
                 $('#container').html(data);
               }
           ).fail(function(error) { alert(error.responseJSON) });
        });
});

J'ai essayé d'autres choses: 1) Changer les navigateurs en Safari (même chose, le serveur renvoie des informations mais le site reçoit une erreur) 2) Définir async = true de false. Pour une raison quelconque, lorsque je l'ai définie sur true, le serveur ne répond pas du tout. Quand c'est faux, le serveur répond.

16
Moo33

J'ai eu ce problème il y a quelques minutes. Le problème est que vous devez définir async:false Sur async:true. Je ne sais pas exactement pourquoi cela fonctionne, je suppose que HTML5 est plus récent que XML.

L'erreur est un peu différente sur ce site mais je pense qu'elle est similaire: JavaScript console.log provoque une erreur: "Synchronous XMLHttpRequest sur le thread principal est obsolète ..."

Mettre à jour

Salut, je suis de retour avec des informations nouvelles et améliorées. Le Cross-Origin se produit avec des ports ainsi que des domaines/IP, et sera probablement en place avec la plupart des navigateurs décents. Si vous voulez savoir ce qui se passe, essayez de changer l'adresse IP en localhost ou vice versa (si vous utilisez localhost). Gardez à l'esprit que ce problème peut se produire lorsque vous utilisez également différents ports. Pour une solution rapide, assurez-vous que dans les en-têtes du serveur principal, vous mettez correctement l'en-tête de contrôle d'accès response.addHeader("Access-Control-Allow-Origin", "*");.

Le code est dérivé de cette question

11
ytpillai

C'était un problème de ressources d'origine croisée (CORS). Mon serveur me renvoyait les informations correctes mais mon navigateur a refusé de les accepter. Pour le corriger, j'ai dû ajouter 2 lignes sur mon Java (pas mon site) pour les définir comme en-tête de réponse:

yourownvariable.setHeader("Access-Control-Allow-Origin:", "Origin url of your site");
yourownvariable.setHeader("Access-Control-Allow-Methods", "GET, POST,PUT");
5
Moo33

J'avais le même problème, avec un message d'erreur identique. Dans mon cas, cela est dû au fait que le serveur a défini un en-tête Feature-Policy avec sync-xhr: none. La suppression de cette directive a résolu le problème.

0
Mark Fisher