У меня проблема с использованием метода 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
метод, потому что мне нужно отправить несколько данных из формы.
если вы хотите использовать 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;
}
В POST-примере вы использовали this.name
, но только в GET-примере name
,
Попробуй использовать $_POST['name']
вместо $_REQUEST['name]
, так как $_REQUEST['name]
это другая переменная затем $_POST
или же $_GET
а также по-разному относиться.