Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 后端php上的$\u post未看到角度Http post请求_Javascript_Php_Angular_Wordpress - Fatal编程技术网

Javascript 后端php上的$\u post未看到角度Http post请求

Javascript 后端php上的$\u post未看到角度Http post请求,javascript,php,angular,wordpress,Javascript,Php,Angular,Wordpress,我正在为woocommerce产品页面上的woocommerce站点构建一个PHP自定义端点,具体提交一个表单,addtocartform 因此,我有一个基于ionic 4/angular 8的移动应用程序,需要向上述端点发送post请求 问题是,post请求来自angular的正文不能通过PHP代码上的$\u post识别,因此$\u post返回null,并且产品没有添加到购物车上 但是当使用postman测试此功能时,请求成功并将产品成功添加到购物车 我尝试在PHP端获取angular J

我正在为woocommerce产品页面上的woocommerce站点构建一个PHP自定义端点,具体提交一个表单,
addtocart
form

因此,我有一个基于ionic 4/angular 8的移动应用程序,需要向上述端点发送post请求

问题是,post请求来自angular的正文不能通过PHP代码上的$\u post识别,因此$\u post返回null,并且产品没有添加到购物车上

但是当使用postman测试此功能时,请求成功并将产品成功添加到购物车

我尝试在PHP端获取angular JSON body并获得成功响应,但该产品没有添加到购物车中,这意味着表单需要一种特定的发送方式,类似于邮递员请求

PHP代码非常简单:

函数yith_custom_add_项(WP_REST_Request$Request){
$currentuserid_fromjwt=get_current_user_id();
$user=get_user_by('id',$currentuserid_fromjwt);
如果($user){
$product\U id=$\U GET['id'];
$url=get\u permalink($product\u id);
$cookie='wordpress_logged_in_856ec7e7dd32c9b2fc11b366505cf40d'。='.wp_生成_auth_cookie($currentuserid_fromjwt,time()+(10*365*24*60*60),'logged_');
Cooki(Cooki(Cooki。Cooki(Cooki)是一个Cooki(Cooki(Cooki的)Cooki(Cooki)是一个Cooki(商业)是一个商业(商业)是一个会话(商业)是一个商业(商业)是一个商业(商业)是一个商业(商业)是一个会话(商业)是一个会话(C7)C(C)C(C)当前的当前的(当前的)当前的)当前的(当前的)管理(当前的)管理(当前的)管理(当前的)管理语言)语言)语言)语言)是一一个语言(当前的(当前的)语言)是一个单词(当前的(管理语言)是一个语言)是一一一个单词的一个单词。一个单词。一个单词。4 4 4 4 4 4 4 4。8。8。8。8。8。8。8。8。8。8。8。8。8。8。8。8。8。8。8。8。8。icl_当前_language=en;PHPSESSID=5ed2009813f8633694a25e297d4ee06;wordpress_登录_856ec7e7dd32c9b2fc11b36505cf40d=deleted;woocommerce_商品_购物车中的项目_=1;woocommerce_购物车_散列=086ae7e0c53740163451a538fe8a9fc';
$angular\u json=json\u decode(文件\u获取\u内容(“php://input"));
如果(!空($\u POST)){
$response=wp\u remote\u post($url,数组)(
'headers'=>数组(
“Cookie”=>$Cookie,
“授权”=>$request->get_头(“授权”),
“内容类型”=>“应用程序/x-www-form-urlencoded”,
),
“body”=>$\u POST,
));
返回$response;
}elseif(!empty($angular_json)){
$response=wp\u remote\u post($url,数组)(
'headers'=>数组(
“Cookie”=>$Cookie,
“授权”=>$request->get_头(“授权”),
“内容类型”=>“应用程序/x-www-form-urlencoded”,
),
“body”=>$angular\u json,
));
返回$json;
}否则{
返回“无需显示”;
}
}
}
角度代码:(服务)

addYithCompositeToCart(id:any,data:any){
const{token}=JSON.parse(localStorage.getItem('user');
让标题={
“内容类型”:“x-www-form-urlencoded;charset=UTF-8”,
“授权”:`Bearer${token}`,
};
//let headers=新的HttpHeaders();
//标题
//.set('Content-type','x-www-form-urlencoded;')
//.set('Authorization','Bearer${token}`);
this.http.post(`${environment.host}yith复合/添加项?id=${id}`,数据{
标题
})
.toPromise()
。然后((数据)=>{
控制台日志(数据);
})
.catch((错误)=>{
console.log(错误);
});
}
组件(单击触发):

addToCart(){
常数数据={
ywcp_选择:Object.assign({},…this.options.map(Object=>({[Object.productSerial]:-1})),
ywcp_variation_id:Object.assign({},…this.options.map(Object=>({[Object.productSerial]:Object.variation.variation_id})),
ywcp_数量:Object.assign({},…this.options.map(Object=>({[Object.productSerial]:1})),
ywcp_所选产品_值:Object.assign({},…this.options.map(Object=>({[Object.productSerial]:Object.productId})),
数量:1,
“添加到购物车”:this.product.id
};
this.cartService.addYithCompositeToCart(this.product.id,数据);
}
邮递员请求

您是否尝试在HttpOptions中指定内容类型,并在正文中提供json数据

用于:


是的,我错过了,我将其更改为
application/x-www-form-urlencoded
,并将主体更改为
HttpParams({formObject:{…data}})
$\u POST
现在获取数据了!,但仍然什么也不做我的意思是仍然不将产品添加到我的购物车,更让我困惑的是,它在postman上工作,它会发送一条成功消息,并按预期将产品发送到购物车。我恐怕我帮不了什么忙,因为我从未真正处理过PHP和wordpress后端,但是可以确保每个步骤的标题都是相同的:(ANGULAR-->PHP)(PHP-->WORDPRESS)(WORDPRESS-->PHP)(PHP-->ANGULAR)并尝试调试PHP和后端之间的交互。
import { HttpHeaders } from '@angular/common/http';

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json',
    'Authorization": `Bearer ${token}`,
  })
};