Javascript 为什么在我的Angular 2应用程序中发送选项请求而不是PUT?

Javascript 为什么在我的Angular 2应用程序中发送选项请求而不是PUT?,javascript,api,angular,cors,Javascript,Api,Angular,Cors,我试图执行模型的更新函数,试图通过PUT调用API中的update方法 这是我的服务客户端: import { Injectable } from '@angular/core'; import { Http, Headers, RequestOptions, RequestMethod, Response } from '@angular/http'; import 'rxjs/add/operator/toPromise'; [...] updateClients(client_

我试图执行模型的更新函数,试图通过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
                  };
                }));
    }
但它不起作用,因为这种方法是通过期权而不是看跌期权。在我的浏览器控制台中显示:
XMLHttpRequest无法加载
。飞行前响应中的访问控制允许方法不允许方法PUT。

但是,在API(Laravel 5.3)中启用了PUT方法。我和邮递员试过,效果不错。在我的回复标题中:

Access-Control-Allow-Origin: *
Allow: GET, HEAD, PUT, PATCH, DELETE
Cache-Control: no-cache
Connection: keep-alive

为什么是通过期权申请而不是卖出?POST方法适用于angular 2。

选项
是浏览器在某些CORS情况下自动发送的飞行前请求。如果服务器没有响应预期的CORS头(
Access Control Allow Origin
和其他),浏览器根本不会发出
PUT
请求

您需要将服务器配置为使用预期的头进行响应,以便能够直接从Angular(或一般的JS)使用此服务器