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; ?>
3 Réponses :
Je peux voir deux problèmes dans votre code:
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());
}
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 code> ... 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 CODE> et
URLSECHPARAMS CODE> CLASSES à partir du module
angular2 / http code>?
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 () code> dans
http.post code>?
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 code>. 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] code> 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 code> objet code> est un objet (pas un type primitif) afin que la classe essaie d'obtenir sa représentation de chaîne (
Tostring code>) qui est
[objet objet] code> par défaut. Peut-être que vous pourriez essayer de définir toutes les propriétés de votre formulaire dans le corps code> 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 ....
J'ai réussi à le faire fonctionner, c'était seulement: et dans la forme.php: p>
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');