我正在尝试执行模型的更新功能,尝试通过PUT调用API中的Update方法。
这是我的服务客户:
import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions, RequestMethod, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';
[...]
updateClients(client_id, data){
let headers = new Headers({ 'Content-Type': 'application/json' });
let body = JSON.stringify(data);
return this.http.put(`${this.baseUrl}/client/`+client_id, body, headers)
.toPromise()
.then(response => response.json().data)
.then(items => items.map((item, idx) => {
return{
id: item.id
};
}));
}
但它不起作用,因为该方法是通过OPTIONS而不是PUT。在我的浏览器控制台中,它出现了:XMLHttpRequest can not load
http://ip/api/client/5 . Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
但是,在API(Laravel 5.3)中,启用了PUT方法。我用POSTMAN尝试过它的作品。在我的回复标题中:
Access-Control-Allow-Origin: *
Allow: GET, HEAD, PUT, PATCH, DELETE
Cache-Control: no-cache
Connection: keep-alive
为什么它来自选项请求而不是? POST方法适用于角度2。
答案 0 :(得分:2)
OPTIONS
是浏览器在某些CORS情况下自动发送的预检请求。如果服务器没有响应预期的CORS标头(Access-Control-Allow-Origin
和其他人),则浏览器根本不会发出PUT
请求。
您需要配置服务器以响应预期的标头,以便能够直接从Angular(或一般的JS)使用此服务器