2
votes

Je reçois une réponse de publication dans l'onglet réseau mais affiche toujours une erreur dans la console

J'écris une méthode de publication en angulaire pour publier des données que je renvoie JSON dans Codeigniter.

c'est un service:

public function user_login()
    {
    if(is_array($_POST) && sizeof($_POST) >0){

       $where_array = array(
        'username'=>$this->input->post('username'),
        'password'=>$this->input->post('password')
        );

            $result = $this->Admin_model->checkuser($where_array);
            // print_r($result); die;
            if($result == "user not found" || $result == "incorrect password")
            {
                $json_data = array("Code"=>"1","data"=>$result);
                echo json_encode($json_data, JSON_UNESCAPED_SLASHES);

            }else{
                 $json_data = array("Code"=>"0","data" => "Login successfull");
                 echo json_encode($json_data, JSON_UNESCAPED_SLASHES);
            }
     }   
 }

Dans mon composant: p>

this.services.postuser(formData).subscribe(
  (data) => {
    console.log(data);
  }
);

erreur suivante, je reçois dans la console Http error response to my post method

et voici une capture d'écran de mon onglet réseau où la réponse est JSON entrez la description de l'image ici

J'ai traversé de nombreuses questions et réponses sur le débordement de pile, mais la solution ne fonctionne pas pour moi. J'ai également changé la réponse de la méthode de publication de JSON en texte et le type de réponse dans la méthode de publication en texte recevant toujours la même erreur.

fonction de backend pour la publication:

public userlogin(data) {
  let uploadURL = `myurl`;

  const requestOptions: Object = {
    responseType: 'json'
  }    
   return this.http.post<any>(uploadURL, data,requestOptions).pipe(map((responce) => {
    console.log(responce);
    return responce;
  })
  );
}

p>


4 commentaires

Les réponses d'erreur peuvent également contenir un corps de réponse. C'est ce qui se passe ici.


pouvez-vous s'il vous plaît élaborer. Je suis assez confus par beaucoup de réponses que dois-je faire exactement


Le document officiel a tout pour plaire. Faites défiler jusqu'à la gestion des erreurs.


selon les documents officiels, j'ai fait une gestion des erreurs j'ai eu une erreur ----> Le backend a renvoyé le code 0, le corps était: [object ProgressEvent]


3 Réponses :


0
votes

Dans mon expérience personnelle de travail avec asp.net core backend (base de données sql) et NodeJS express backend (mongoDB)

dans Angular Front-end:

dans mes services qui renvoient Observable renvoyez simplement la demande de publication, comme ceci:

this.service.postMethod(data).subscribe((res)=>{}, (err)=>{});

dans le composant qui utilise le service va être comme ceci:

return this.http.post(url, data, options);

p>


17 commentaires

si vous répondez avec json, faites ceci: JSON.stringify (res)


vérifiez l'erreur que le revenu du backend, obtenez d'abord les propriétés d'erreur en utilisant ce Object.getOwnPropertyNames (); et assurez-vous d'envoyer l'objet de données de la même manière que votre back-end le lit, les noms de propriété doivent correspondre


et les options, n'envoyez pas d'options inutiles à votre back-end


oui je l'ai fait et maintenant je reçois le code retourné par Backend 0, le corps était: [object ProgressEvent]


Donc, si une erreur se produit lorsque ProgressEvent est en cours, je pense que quelque chose ne va pas lorsque HttpClient publie des données sur le backend, pouvez-vous me donner un code de réponse dans votre back-end?


Oui bien sûr!! reposnse: - $ json_data = array ("data" => $ result); echo json_encode ($ json_data);


comment votre backend fonctionne avec la demande? veuillez me donner cette partie du code backend qui fonctionnera avec la demande de connexion. Je veux voir comment votre back-end voit le nom d'utilisateur et le mot de passe


personnellement, avant d'envoyer des données au backend, transformez-les en objet js comme ceci: data = {username: 'usename', password: 'password'}


j'envoie des données de formulaire


Il semble que votre back-end ne puisse pas voir la valeur du nom d'utilisateur. si formData est un type de groupe de formulaires, ajoutez .value à la fin de formData, comme ceci: this.services.postuser (formData.value) .subscribe ((data) => {console.log (data);});


mais je reçois une réponse comme indiqué sur la capture d'écran de l'onglet réseau


oui, et la réponse indique que Code 1, Utilisateur introuvable


c'est ma réponse définie dans mon modèle ci si l'utilisateur n'est pas trouvé


ok, et si je comprends votre question, vous avez votre nom d'utilisateur et votre mot de passe dans votre base de données, et votre back-end ne peut pas le récupérer, ai-je raison?


non mes API fonctionnent correctement et testées sur postman et lors de l'utilisation sous forme angulaire, les données sont récupérées dans ci et la réponse est également envoyée correctement.


c'est aussi un avertissement: zone-evergreen.js: 2952 Cross-Origin Read Blocking (CORB) a bloqué la réponse cross-origin "url" avec le type MIME application / json. Voir "url" pour plus de détails. mais si des cors sont ajoutés, il n'envoie pas de réponse du tout


merci à vous de clarifier mes problèmes de gestion des erreurs aussi.



3
votes

résolu par moi-même:

J'ai trouvé que le problème ne concernait pas la demande que j'envoyais ou la réponse. en fait, c'était une erreur cors car le serveur n'est pas configuré pour accepter la requête d'origine croisée.

d'abord, j'installe cette extension Firefox pour tester le problème puis j'ai eu la réponse.

donc Après le test, dans mon fichier ci J'ai défini l'origine sur '*' pour autoriser toutes les origines.

header("Access-Control-Allow-Origin: *");


0 commentaires

0
votes

Définissez également le type de contenu json pour qu'il ne génère aucune autre erreur juste pour être sûr.

mettez le code ci-dessous au-dessus du fichier php:

header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');

Pour référez-vous à cette réponse.


0 commentaires