2017-08-03 157 views
-1

任何人都可以在我的新的Angular 4 Project中使用HTTP請求來幫助我使用restful API進行GET,POST和PUT數據。Angular 4 restful API「PUT」和「POST」方法

我設法從API得到我的數據,但是當我嘗試後還是把它總是與

OPTIONS http://pencil-designs.com/codeigniter/index.php/api/Orphans/add_orphan 405 (Method Not Allowed) 

XMLHttpRequest cannot load http://pencil-designs.com/codeigniter/index.php/api/Orphans/add_orphan. Response for preflight has invalid HTTP status code 405 

Response {_body: ProgressEvent, status: 0, ok: false, statusText: "", headers: Headers…} 

這裏返回的是我的服務代碼

import { Injectable } from '@angular/core'; 
 
import { Http, Headers } from '@angular/http' 
 
import 'rxjs/Rx'; 
 

 
@Injectable() 
 
export class OrphansService { 
 
    constructor(private http : Http) { } 
 
    private headers = new Headers({ 
 
     'Content-Type' : 'application/json', 
 
     'Access-Control-Allow-Origin' : '*', 
 
     'Access-Control-Allow-Methods' : 'GET,PUT,POST,DELETE', 
 
     'Access-Control-Allow-Headers' : 'Content-Type' 
 
    }) 
 

 
// Get all Orphans 
 
    getAllOrphans(){ 
 
    return this.http.get('http://pencil-designs.com/codeigniter/index.php/api/Orphans/getAllOrphans3').map(res => res.json()); 
 
    } 
 
    
 

 

 
// Delete an orphan 
 
    deleteOrphanApi(orphan_id){ 
 
    return this.http.put('http://pencil-designs.com/codeigniter/index.php/api/Orphans/update_orphan?orphan_id=' + orphan_id, {headers:this.headers}) 
 
    } 
 

 

 

 
// Add New Orphan 
 
    addOrphanApi(orphan){ 
 
    return this.http.post('http://pencil-designs.com/codeigniter/index.php/api/Orphans/add_orphan', orphan, {headers:this.headers}).map(res => res.json()); 
 
    } 
 

 
}

我嘗試了很多解決方案來發送頭文件,我真的不知道問題出在哪裏,我的代碼或服務器配置,或者API。

這是鏈接到在線應用程序 http://pencil-designs.com/cpms-app/

我卡在這一點,並進入無限循環,任何幫助,請!

+0

的API不允許'OPTIONS '方法。 隨着您刪除請求,您也可以使用'delete'方法。 – sheplu

+0

您可以使用像Advanced REST客戶端這樣的工具來將PUT或POST測試主體發佈到您的服務器端點嗎? – Hodglem

+0

@Hodglem - 這會有什麼好處呢?這是它失敗的OPTIONS請求。 – Quentin

回答

0

由於您要將請求發送到不同的域,因此您應該允許在您的API中使用跨源資源共享(CORS)。

您不必在您的JS代碼中設置標頭,因爲這是瀏覽器自動執行的操作,併發送帶「OPTIONS」類型的標籤請求以查看CORS是否已啓用,以及您的網站的域是否允許或不。

在PHP代碼

,你應該送這是不建議讓所有的起源,雖然下面的響應頭

'Access-Control-Allow-Origin' : '*', 
'Access-Control-Allow-Methods' : 'GET,PUT,POST,DELETE', 

,只要把你的網站名稱

+0

感謝Haitham,但我之前嘗試過,並沒有奏效。不過,我仍然發送與我的請求相同的標題。 –