0

Je n'arrive pas à faire fonctionner mon application angulaire 4 dans IE 11 avec le nouveau poste httpclient. Ce problème est uniquement lié à IE11 et fonctionne correctement en chrome.problèmes de polyfills avec Internet Explorer 11 et angulaire HttpClient post

Je continue d'obtenir l'erreur Caractère invalide. De ce que je peux voir qui diffère est le corps de poste que j'envoie au serveur. Dans le navigateur Chrome, il est formaté comme ceci:

enter image description here

Et dans IE11 le même objet est à la recherche comme ceci:

enter image description here

peut ces propriétés Symbole gâcher l'objet pour qu'il ne sera pas accepté sur le serveur? Si je ne pars pas le message d'erreur avec un intercepteur je reçois juste l'erreur interne de serveur (500).

Tel est l'objet que je précise à envoyer dans le corps:

laisser corps = {

FromDate: form.fromDepDate, // Date de
ToDate: form.toDepDate, // Date de
UserIds: userIds // tableau de chaînes
};

Répondre

0

Pas 100% sûr que j'ai compris ce que vous avez demandé. Il ressemble à un problème de nombreux utilisateurs angulaires avec IE. Ce problème est que les requêtes http passent réellement mais sont vues comme des erreurs par angulaire car elles ne peuvent pas analyser la réponse du serveur (mais vous parlez de 500. Si vous obtenez 500 erreurs de serveur interne, c'est probablement un problème avec votre backend)

Si vous n'obtenez pas 500s mais un comportement nul comme décrit ci-dessus, cela semble être un bug sur IE11 (et peut-être d'autres) avec angulaire 4+. Il semble que HttpClient ne peut pas analyser 200 réponses vides.

Le bug est suivi sur le angular repo.

Bien qu'il a été fixé dans angulaire 5.2.4, si vous ne pouvez pas ou ne mettre à jour, solution de contournement multiples semblent fonctionner:

  • Une possibilité est de changer votre serveur pour revenir à la place 204 No Content Lorsque le corps de la réponse est vide
  • Une autre solution possible est d'utiliser un intercepteur HTTP pour effectuer le travail as compeek suggested.

C'est ma solution:

@Injectable() 
export class EmptyResponseBodyInterceptor implements HttpInterceptor { 
intercept(req: HttpRequest <any> , next: HttpHandler): Observable < HttpEvent <any>> { 
    req = req.clone({ 
     responseType: 'text' 
    }); 

    return next.handle(req) 
     .map((res) => { 
      if (res instanceof HttpResponse) { 
       if (res.body === 'OK') { 
        res.clone({ 
         body: null 
        }); 
       } else { 
        res = res.clone <any> ({ 
         body: res.body !== '' ? JSON.parse(res.body) : null 
        }); 
       } 
      } 

      return res; 
     }); 
} 

}