2017-09-01 18 views
0

私はこれを、運がない一日近く把握しようとしています。Angular2 http.postはAPIにJSONデータを送信しません

import { Component } from '@angular/core'; 
    import { Http, Response, Headers, RequestOptions } from '@angular/http'; 
    import 'rxjs/add/operator/toPromise'; 

    @Component({ 
    selector: 'SendPost', 
    }) 
    export class SendPostComponent { 

    constructor(
     private http:Http, 
    ) {} 

    private urlPost:string = 'www.mydomain.com/api/order.php' 

    private addToBasket() { 
     var data = { 
     foo: "bar", 
     foo1: "another" 
     } 
     var postData = JSON.stringify(data); 

     let headers = new Headers({'Content-Type': 'application/json'}); //x-www-form-urlencoded 
     headers.append('Access-Control-Allow-Methods', "GET, POST, OPTIONS"); 
     let options = new RequestOptions({ headers: headers }); 

     this.http.post(
      this.urlPost, 
      postData, 
      options 
     ) 
     .toPromise() 
       .then((res) => {this.extractData(res)}); 
    }  

    private extractData(res: Response) { 
     console.log('extractData:', res); 
    } 

    } 

は、私は絶対最小限にAPIエンドポイントをストライピング:いいえ.htacces、ちょうどPHPファイルこの単純なコード:私は空の配列内を得続ける

<?php print_r(json_encode($_REQUEST)); die; ?> 

は、私はシンプルなhttp.post要求を持っています戻る。しかし、私がこのようなコードを変更した場合:

var data2 = 'foo=bar&foo1=another' 
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 

その後、$ _REQUESTオブジェクトは自分のデータを取得します。私は何が欠けていますか?

+0

URLパラメータを使用して結果を取得した場合、それはPHPに関連しており、角度関連ではありません。私はPHPに精通していませんが、おそらくJSON投稿要求を受け入れるように設定する必要があります – trichetriche

+0

'JSON.stringify'はJSON文字列を返しますが、必要なのはhttps://stackoverflow.com/questions/1714786/query-stringです-encoding-of-a-javascript-object –

答えて

1

PHP $ _REQUESTは次のとおりです。

連想配列、デフォルトでは$ _GET、$ _POSTおよび$ _COOKIE

$_POST

連想配列の内容が含まれていることにより、要求のHTTP Content-Typeとしてapplication/x-www-form-urlencodedまたはmultipart/form-dataを使用するときに、HTTP POSTメソッドを介して現在のスクリプトに渡される変数の数。あなたはこのように要求エンティティ本体からデータを取り出すことができます:PHPは「アプリケーション/ jsonの」データを解析することはできません

、この問題を回避するには、「( 『//入力のphp』)のfile_get_contents」を用いて、php wrapper次のとおりです。

$body = file_get_contents('php://input'); 
$data = json_decode($body); 
print_r($data); // here is what you need 
関連する問題