Angular 5 и PHP не могут использовать метод POST для отправки значения серверным сценариям

У меня проблема с использованием метода post в Angular 5 и PHP.

У меня есть этот метод от .ts учебный класс:

addPartners(partnerName)
{
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
this.name = JSON.stringify(partnerName)
console.log("hi "+ this.name)
return this.http.post('http://aff.local/addPartner.php', this.name, {
observe: 'response',
responseType: 'json'
}).pipe(map(
res=>{
console.log(res)
}
))
}

И я позвоню на (click) событие кнопки:

addPartner(){
this.email = this.subscribeForm.get('emailTxt').value;
//console.log(this.email)
this.api.addPartners(this.email).subscribe(
(data)=>{
console.log(data);
this.subscribeForm.reset();
},
(error)=>{
console.log(error)
}
);
}

PHP-скрипт:

addPartner ($ partnerName);
echo $ result;
?>

Когда я заполняю текстовое поле и нажимаю на кнопку, отправленное значение остается пустым.

Когда я меняю метод, отправив переменную в url это работает правильно.

Вот рабочий скрипт. В главном классе API:

addPartners(partnerName)
{
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
this.name = JSON.stringify(partnerName)
console.log("hi "+ name)
return this.http.post('http://aff.local/addPartner.php?name='+ name, {
observe: 'response',
responseType: 'json'
}).pipe(map(
res=>{
console.log(res)
}
))
}

Я просто изменил URL в:

http://aff.local/addPartner.php?name='+ name,

И в сценарии php я получу его используя $_REQUEST['name'],

Я хочу использовать POST метод, потому что мне нужно отправить несколько данных из формы.

0

Решение

если вы хотите использовать JSON.stringify, чтобы вы могли получать параметры со стороны сервера, используя:

$request_body = file_get_contents('php://input');
$data = json_decode($request_body);

или если мы хотим просто получить данные, используя $ _POST [‘paramName’], поэтому мы должны использовать нижеприведенное на вашей стороне клиента:

let headerOptions = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
let data = {name: partnerName};
let body = this.formatData(test);

и отформатируйте ваши данные так:

formatData(data) {
let returnData = '';
let count = 0;
for (let i in data) {
if (count == 0) {
returnData += i + '=' + data[i];
} else {
returnData += '&' + i + '=' + data[i];
}
count = count + 1;
}
return returnData;
}
3

Другие решения

В POST-примере вы использовали this.name, но только в GET-примере name,

Попробуй использовать $_POST['name'] вместо $_REQUEST['name], так как $_REQUEST['name] это другая переменная затем $_POST или же $_GET а также по-разному относиться.

0

По вопросам рекламы [email protected]