Рассмотрим следующее:
<?php
function sayHelloLater(){
return "Hello";
}
function sayGoodbyeNow(){
echo "Goodbye";
}
$hello = sayHelloLater(); // "Hello" returned and stored in $hello
$goodbye = sayGoodbyeNow(); // "Goodbye" is echo'ed and nothing is returned
echo $hello; // "Hello" is echo'ed
echo $goodbye; // nothing is echo'ed
?>
Вы можете ожидать, что выход будет:
HelloGoodbye
Фактический выход:
GoodbyeHello
Причина в том, что «Goodbye» вызывается (записывается) как результат, как только вызывается функция. С другой стороны, «Hello» возвращается в переменную $hello
. $goodbye
на самом деле пуст, так как функция прощания ничего не возвращает.
Если вы используете HttpParams
, обратите внимание, что класс является неизменным ( Документация )
Таким образом, вам нужно будет сделать это
const httpParams = new HttpParams().set('user', username).set('pass', password);
Изменить: ваш PHP-скрипт ожидает форму закодированных значений, поэтому вам нужно сделать что-то вроде этого
let headerOptions = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
return this.http.post('http://dev.local/scripts/login.php',
httpParams.toString(), {
observe: 'response',
responseType: 'text',
headers: headerOptions
}
);
Method # 2
Если вы хотите отправить данные как json, тогда вы нужно изменить свой PHP-скрипт для анализа тела запроса
$jsonInput = file_get_contents('php://input');
$jsonObject = json_decode($jsonInput, true);
$user = $jsonObject->user;
И вам нужно будет указать правильные имена параметров угловой стороны
return this.http.post('http://dev.local/scripts/login.php',
{user: username, password: password},
...
Также обратите внимание, что ваш Access-Control
бесполезны в угловом режиме, они должны быть установлены на стороне сервера при ответе на запрос OPTIONS
Прежде всего, откройте инструменты разработчика вашего браузера и проверьте сетевые вызовы, чтобы увидеть, что вы отправляете.
Затем вы создаете HttpParams, но вы его не используете, поэтому вы его не отправляете.
Как было предложено Дэвидом, вам нужно обмениваться данными в режиме кодирования формы, поэтому вам нужно установить это в HttpHeader:
let headerOptions = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');
Попробуйте следующее:
return this.http.post('http://dev.local/scripts/login.php',
{'user': username, 'pass': password}
{ headers: headerOptions }
)