簡體   English   中英

ionic2不發送帖子數據

[英]ionic2 not sending post data

以下是我的auth.service.ts中的一個函數,我正在從我的一個頁面中調用它。

import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { Storage } from '@ionic/storage';
import 'rxjs/add/operator/map';

@Injectable()
export class AuthService {

  public token: any;

  constructor(public http: Http, public storage: Storage) {

  }
login(credentials){

return new Promise((resolve, reject) => {
    console.log(credentials);
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    this.http.post('https://mysite.co.uk/ionlogin.php', JSON.stringify(credentials), {headers: headers})
      .subscribe(res => {

        let data = res.json();
        this.token = data.token;
        this.storage.set('token', data.token);
        resolve(data);

        resolve(res.json());
      }, (err) => {
        reject(err);
      });

});

}
}

上面的登錄函數被成功調用,但是它不發送任何數據。 但是在控制台中console.log(credentials)在請求后打印。

{電子郵件:“ sugumar”,密碼:“ 123456”}

但是在瀏覽器的“網絡”標簽中,我看不到任何發送到服務器的數據。

在我正在使用的服務器上打印

的var_dump(json_decode(的file_get_contents( “PHP://輸入”)));

在瀏覽器的“網絡”標簽中顯示為null

我還在控制台中看到以下錯誤

XMLHttpRequest無法加載https://mysite.co.uk/ionlogin.php 在飛行前響應中,Access-Control-Allow-Headers不允許請求標頭字段Access-Control-Allow-Origin。

所以我在PHP中添加了以下幾行

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header("Access-Control-Allow-Methods: OPTIONS, GET, POST");
header("Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, 
    X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control");

但仍然是同樣的問題

嘗試使用RequestOptions而不是直接將標頭作為對象發送

import { Http, Headers, RequestOptions } from '@angular/http';

public login = () => {
  return new Promise((resolve, reject) => {
    let headers = new Headers({'Content-Type', 'application/json'});
    // JUST TOOK OFF APPEND CAUSE I LIKE THIS WAY, THERE'S NO NEED FOR YOU TO REMOVE IT.
    let options = new RequestOptions({headers: headers});
    this.http.post('https://mysite.co.uk/ionlogin.php', JSON.stringify(credentials), options)
    .subscribe(res => {

      let data = res.json();
      this.token = data.token;
      this.storage.set('token', data.token);

      // WHY DO YOU RESOLVE THIS TWICE? IT'LL ONLY GET THE FIRST RESOLVE
      resolve(data);
      resolve(res.json());
    }, (err) => {
      reject(err);
    });
  });
}

RequestOptions模塊基於獲取請求的獲取規范來創建您的選項,可能只是在對象使它失敗或請求選項提供的某些東西丟失時僅傳遞標頭。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM