Http.post在';application/json';在Angular4 cli的标题中设置

Http.post在';application/json';在Angular4 cli的标题中设置,angular,angular-cli,angular2-services,angular-http,Angular,Angular Cli,Angular2 Services,Angular Http,我是Angular CLI的初学者,我使用了登录api:“”使用http.post,但在设置'content-type:application/json'时,我没有在服务器端(codeigniter/php)获取post数据。下面是我在登录服务中使用的代码,当我使用'application/x-www-form-urlencoded'而不是'application/json'时,也会获得post数据 DataService.ts file: import { BadInputError }

我是Angular CLI的初学者,我使用了登录api:“”使用http.post,但在设置
'content-type:application/json'
时,我没有在服务器端(codeigniter/php)获取post数据。下面是我在登录服务中使用的代码,当我使用
'application/x-www-form-urlencoded'
而不是'application/json'时,也会获得post数据

DataService.ts file:  

import { BadInputError } from './../common/bad-input-error';
import { error } from 'selenium-webdriver';
import { AppError } from './../common/app-error';
import { Observable } from 'rxjs/Observable';
import { Http, ResponseOptionsArgs,RequestOptionsArgs,Headers,RequestOptions } from '@angular/http';
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/map';
import 'rxjs/add/observable/throw';
import { NotFoundError } from '../common/not-found-error';
import { Response } from '@angular/http/src/static_response';
import { HttpHeaders } from '@angular/common/http';



 @Injectable()
 export class DataService {

    constructor(private http:Http) {
 }



   getWhere(url,resource){
     let headers= new Headers();
     //headers.append('Access-Control-Allow-Origin:','*');
     headers.append('Accept','text/plain');
     headers.append('content-type','application/json');
     //headers.append('content-type','application/x-www-form-urlencoded');
     let option= new RequestOptions({headers:headers});

    return this.http.post(url,JSON.stringify(resource),option)
      .map(response=>response.json())
    .catch(this.handleError);
   }
 }
AuthService.ts文件:

import { DataService } from './data.service';
import { Injectable } from '@angular/core';



@Injectable()
export class AuthService{

private url = 'http://localhost/appointjobs/index.php/admin_api/index';
constructor(private dataService:DataService) {
}

signIn(params:HTMLInputElement){
  this.dataService.getWhere(this.url,params)
  .subscribe(response=>{
    console.log(response);
  });
 }
}

使用FormData将数据发送到php

将您的服务更改为下面的

getWhere(url,resource){

     const formData: FormData = new FormData();
     formData.append('data', JSON.stringify(resource));

     let headers= new Headers();
     headers.append('Accept', 'application/json');

    return this.http.post(url,formData, { headers: headers })
      .map(response=>response.json())
    .catch(this.handleError);
   }
 }
在你的php中

print_r($_POST['data']); // gives you the json
使用


您是否在任何地方执行此.getWhere(url,resource).subscribe()?如果没有subscribe,调用永远不会真正启动。您不必指定头文件。append('content-type','application/json');1.不要使用Http。它已被弃用。使用HttpClient,如文档所示:。2.如果后端API需要JSON,则需要发送JSON。如果需要application/x-www-form-urlencoded,则需要设置正确的内容类型头,并以application/x-www-form-urlencoded格式传递键/值对。将内容类型设置为application/x-www-form-urlencoded并发送JSON正文没有任何意义。@JBNizet取决于他使用的是angular2/4还是Angular5,但是的,HttpClient更好option@mast3rd3mon他用的是角度4。但是,即使他使用的是angular 2,第一步应该是升级。我尝试使用fromData,但在post数据中为空。您的资源是否包含数据检查,即是以post方式获取数据但格式不正确检查此post数据{“data”:“{“username\”:\“FFDSFDDSSFSFSF\”,“password\:\“DSFDFSFS\”}在php中获取此数据?您必须解码json才能获得所需的结果,请尝试json_decode($\u POST['data])
json_decode($_POST['data']) // converts your json string into object