angular - 当 'application/json' 在 Angular4 cli 的 header 中设置时,Http.post 不起作用

标签 angular angular-cli angular2-services angular-http

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

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

使用

json_decode($_POST['data']) // converts your json string into object

关于angular - 当 'application/json' 在 Angular4 cli 的 header 中设置时,Http.post 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48539383/

相关文章:

angular - 第 3 方库 (ng2-page-scroll) 在 Angular-Cli 项目中不起作用

angular - Angular2 中的响应拦截器

html - Angular 2,视频时长访问。

javascript - Angular JS 2 不创建 main.js

css - 使用 angular-cli 构建是否会添加新的用户代理样式表?

angular - 引导过程中的异步 HTTP 调用

angularfire2 增加值(value)的最佳方式?

Angular 在使用指令时给出@angular/core 404 not found 错误

html - 如何设计表格样式并水平显示输入(还需要样式建议)

angular - 在 angular-cli 创建的 environment.ts 文件中访问 process.env