angularjs 4:如何发布原始 JSON 数据

Moh*_*mad 3 php json http angular

我想向我的 php api 发送以下请求:

POST /MyProject/api-get?call=get-account HTTP/1.1
Host: localhost

{
"id":1
}
Run Code Online (Sandbox Code Playgroud)

这是api:

public function actionApiGet($call){
    $data = json_decode(file_get_contents('php://input'), true);
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的组件.ts:

import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { ActivatedRoute } from '@angular/router';
import { Api } from '../../services/Api';
import { Account } from '../../models/Account';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';

@Component({
  selector: 'app-account-individual',
  templateUrl: './account-individual.component.html',
  styleUrls: ['./account-individual.component.css']
})
export class AccountIndividualComponent{

  constructor(private route: ActivatedRoute, private proxy: Api) {
    const myheader = new HttpHeaders().set('Content-Type', 'application/json; charset=UTF-8');

    this.proxy.post2('http://localhost/MyProject/api-get?call=get-account', {"id":1}, {headers: myheader}).subscribe(
      res => {
        if (res["statusCode"] === 1) {
          console.log(res);
        }
      }
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

api.ts:

import { Injectable } from '@angular/core';
import { Http, Headers, Response, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
import * as Globals from 'Globals';

@Injectable()
export class Api {

    constructor(private http: Http) { }

    postData(url,body){
        return this.http.post(url, body).map(this.extractData).catch(this.handleErrorPromise);
    }

    private extractData(res: Response) {
        let body = res.json();
        return body||{};
    }

    private handleErrorObservable(error: Response | any) {
        console.error(error.message || error);
        return Observable.throw(error.message || error);
    }

    private handleErrorPromise(error: Response | any) {
        console.error(error.message || error);
        return Promise.reject(error.message || error);
    }
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是我收到了这个错误:

提供的参数与调用目标的任何签名都不匹配

小智 6

使用 HttpClient 代替 Http

import { HttpClient } from '@angular/common/http';

constructor(private http: HttpClient){}    

post(url: string, data?: any) {
   return this.http.post(url, data);
}
Run Code Online (Sandbox Code Playgroud)