8
votes

Angulaire2 HTTP.Post Valeur de la valeur du serveur PHP

J'essaie d'envoyer des valeurs de formulaire à partir du projet IONIC2 (Angular2 Typescript) à un serveur PHP dans lequel je vais envoyer un courrier de contact.

Je ne peux pas obtenir les valeurs je suis censé ... P>

Voici ma forme.Service.ts: p>

<?php
header('Content-type: application/json');

    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
            header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         
        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
            header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
        exit(0);
    }

$value = json_decode(file_get_contents('php://input'));

// for test     
echo $value->name;

?>


0 commentaires

3 Réponses :


8
votes

Je peux voir deux problèmes dans votre code:

  • Vous créez un contenu JSON avec json.stringify mais pour les formulaires, vous devez utiliser la classe urlseearbparams code> ou créer le contenu de la chaîne à la main. Li>
  • Votre valeur de type de contenu n'est pas correcte. C'est Application / X-www-Form-Urlencoded code> et non Application / X-www-Urlencoded code>. Li> ul>

    Voici ce que vous devez utiliser à la place: P>

    sendMail(value: Object): Observable<any> {
      const body = new URLSearchParams();
      Object.keys(value).forEach(key => {
        body.set(key, value[key]);
      }
    
      let headers = new Headers();
      headers.append('Content-Type',
         'application/x-www-form-urlencoded');
      return this._http.post(this._contactUrl, body.toString(), {
        headers : headers
      }).map(res => res.json());
    }
    


15 commentaires

Quelles propriétés sont censées ajouter dans l'urlsearchParams? Le type de contenu est-il "Application / Application / X-www-Form-Urlencodé" ou "Application / X-www-Form-Urlencodé"? Merci!


En ce qui concerne les propriétés, je suppose que celles de votre objet valeur ... Que voulez-vous envoyer au serveur: contenu JSON ou formulaire? J'ai aussi mis à jour ma réponse ...


Je construis un formulaire de contact, alors oui c'est un formulaire.


Importez-vous les deux en-têtes et URLSECHPARAMS CLASSES à partir du module angular2 / http ?


Pourriez-vous fournir ce que vous avez dans les outils DEV dans l'onglet Réseau? Pour voir ce qui est effectivement envoyé ... Sera utile de déboguer votre problème


Ici: dropbox.com/s/h0wjqun4vlg291t/... et l'objet est ici!


Utilisez-vous corps.tostring () dans http.post ?


Oui: renvoyer cela._http.post (this._contacturl, corps.tostring (), (...)


Pourriez-vous montrer la source pour former des données dans votre précédente capture d'écran?


Bien sûr: Dropbox.com/s/p2hsrnortj5mkde/email.php?dl= 0 C'est un fichier PHP simple. J'essaie d'obtenir l'objet ...


et en devtools dans les devtools. En bas dans la zone "Form Data" (en cliquant sur "View Source" ... merci!


L'objet est vide?


En fait non, mais je verrais quelque chose comme dans la zone de données de formulaire: param1 = val1 & param2 = val2 . Voici une plunkr décrivant ce traitement: PLNKR.CO/EDIT/JNVBILA4RGTFO3JZI1PL?p=preview. Ne vous inquiétez pas de l'erreur 415 de la demande, la chose importante est le contenu de la demande ;-)


valeur = [objet d'objet] Permettez-moi de penser que vous utilisez quelque chose comme ça: Var Corps = New UrlSearchParams (); body.set ('valeur', valeur.value); `et l'attribut valeur de votre objet est un objet (pas un type primitif) afin que la classe essaie d'obtenir sa représentation de chaîne ( Tostring ) qui est [objet objet] par défaut. Peut-être que vous pourriez essayer de définir toutes les propriétés de votre formulaire dans le corps variable ...


Impossible de ne pas avoir quelque chose ... Je fixe les valeurs du corps et c'est la même chose ... Si vous avez le temps, pouvez-vous regarder: DropBox.com/sh/ZXXSWQHF34GQBPH/AABBKDK3EHBFJXK3RXCTCT-PUA?DL= 0 Merci que cela me conduit ....



4
votes

J'ai réussi à le faire fonctionner, c'était seulement: xxx

et dans la forme.php: xxx p> merci à thierry Templier pour son aide précieuse.


0 commentaires

1
votes

Peut-être pour quelqu'un que ce sera utile. J'ai eu un problème d'objets imbriqués - avec des objets PHP comme celui-ci:

//at top of you .ts file
let qs = require('qs');

return this.http.post(url, qs.stringify(data), {headers: this.postHeader})
    .map((resp: Response) => resp.json())
    .catch((error: any) => Observable.throw(error) || 'Server error');


0 commentaires