Angular 6 и PHP: невозможно отправить параметр через HttpParams в скрипт PHP

Рассмотрим следующее:

<?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 на самом деле пуст, так как функция прощания ничего не возвращает.

0
задан droidnation 13 July 2018 в 12:16
поделиться

2 ответа

Если вы используете 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

0
ответ дан David 17 August 2018 в 13:05
поделиться

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

Затем вы создаете 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 }
      )
0
ответ дан firegloves 17 August 2018 в 13:05
поделиться
  • 1
    Пожалуйста, проверьте изменения в конце моего вопроса. – droidnation 13 July 2018 в 12:14
  • 2
    Проверьте изменения. Сожалею. – droidnation 13 July 2018 в 12:17
  • 3
    вы правильно отправляете данные, как вы можете видеть в полезной нагрузке запроса. где вы читаете значение пользователя из запроса в php? – firegloves 13 July 2018 в 12:20
  • 4
    $user = $_POST['user']; он уже находится в моем php-скрипте. – droidnation 13 July 2018 в 12:21
  • 5
    ой, извини. это строка, которая выводит вашу ошибку? – firegloves 13 July 2018 в 12:22
Другие вопросы по тегам:

Похожие вопросы: