2017-02-01 7 views
2

Я действительно борюсь с POST-запросами в Angular 2. Я могу отправить запрос с определенными параметрами, но мой backend (PHP Slim v3) не могут получить параметры. Поэтому я исследовал свой запрос и понял, что мой запрос angulr отправляет «content-type: application/text-plain». Поэтому мой бэкэнд не имеет доступа к переменным.Angular 2 Сообщение: Не отправлять 'content-type: application/json' на сервер

Затем я прочитал много руководств, просмотренных здесь, в переполнении стека и пришел к выводу, что мне нужно добавить заголовок.

Мой угловой класс выглядит следующим образом:

/** 
* Generic method for all POST-requests. 
* 
* @author 
* @date 08.01.2017 
*/ 
postData(apiUrl, data): any 
{ 

    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 
    let body = JSON.stringify(data) 

    return this.http.post(apiUrl, body, options) 
     .map((responseData) => 
     { 
      if(responseData.status === 200) 
      { 
       return this.extractData(responseData); 
      } 
      else 
      { 
       this.handleRestError(null); 
      } 
     }) 
     .catch(res => { 
      return this.handleRestError(res); 
     }); 
} 

Так что в целом довольно просто. Однако, когда я отправляю этот запрос, странно, что он каким-то образом признает это как запрос OPTIONS и дает мне «Unsupported method: OPTIONS».

Пожалуйста, смотрите заголовок запроса здесь:

OPTIONS /auth/new HTTP/1.1 
Host: localhost:8080 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Access-Control-Request-Method: POST 
Origin: http://localhost:8100 
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 
Access-Control-Request-Headers: content-type 
Accept: */* 
Referer: http://localhost:8100/ 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 

Мой ответ от внутреннего интерфейса выглядит следующим образом:

HTTP/1.1 200 OK 
Host: localhost:8080 
Connection: close 
X-Powered-By: PHP/5.6.28 
Set-Cookie: PHPSESSID=aa546thl9maj7hamjj64vpbe95; path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-type: text/plain;charset=UTF-8 
Allow: POST 
Access-Control-Allow-Methods: OPTIONS 
Content-Length: 21 

И ответ от сервера выглядит следующим образом:

Allowed methods: POST 

Тем не менее, мне удалось получить правильный ответ от сервера с отсутствием параметры параметр в почтовом запросе. Затем запрос отправляется правильно, и я вижу нужные параметры в полезной нагрузке запроса в консоли Chrome. Проблема в том, что я не могу получить доступ к переменным на backend, потому что он продолжает давать мне «content-type: text/plain».

Любая идея, что я делаю неправильно?

Благодарим за помощь!

ответ

2

Это связано с тем, что вы сталкиваетесь с проблемой CORS, поэтому вам также нужно использовать метод OPTIONS (backend). что-то вроде этого:

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, OPTIONS 
Access-Control-Allow-Headers: Content-Type 
Access-Control-Max-Age: 86400 

Узнайте больше о CORS здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

+0

Ого, спасибо за быструю помощь !!! Я допустил метод GET и POST, но я забыл, что в POST-запросах сначала есть запрос OPTIONS. Благодаря!! – dave0688

 Смежные вопросы

  • Нет связанных вопросов^_^