Javascript 我的对象正在将null从Ajax传递到php
我试图通过Ajax将一些数据从JS传递到PHP,但在使用数据时出错,因为它们是空的 问题涉及两个对象:Javascript 我的对象正在将null从Ajax传递到php,javascript,php,ajax,laravel,Javascript,Php,Ajax,Laravel,我试图通过Ajax将一些数据从JS传递到PHP,但在使用数据时出错,因为它们是空的 问题涉及两个对象:首次登场和财务 我的JS代码: $('#CodeFinition').change(function(){ var periode=$("#Période").val(); var DebutFin = periode.split(' - '); var Debut = DebutFin[0]; var Fin = DebutFin[1]; var ma
首次登场
和财务
我的JS代码:
$('#CodeFinition').change(function(){
var periode=$("#Période").val();
var DebutFin = periode.split(' - ');
var Debut = DebutFin[0];
var Fin = DebutFin[1];
var marque = $("#CodeMarque").val();
var modele = $("#CodeModele").val();
var finition = $("#CodeFinition").val();
$.ajax({
url:"home/Calculer?Debut:"+Debut+"&Fin:"+Fin+"&Marque:"+marque+"&Modele:"+modele+"&Finition:"+finition,
method:"GET",
cache : false,
processData: false,
success:function(result)
{
$("#CommandePasses").data('easyPieChart').update(result);
$('span', $("#CommandePasses")).text(result);
}
})
});
我的控制器代码:
public function Calculer( Request $request )
{
if(isset($request))
{
$marque = $request->get('marque');
$modele = $request->get('modele');
$finition = $request->get('finition');
$Debut = $request->get('Debut');
$Fin =$request ->get('Fin');
$TotalAproduire = 100;
$Commande = DB::connection('sqlsrv2')->table('Commande_nadine')
->join('finition','Commande_nadine.CodeFinition','=','finition.CodeFinition')
->where('finition.CodeFinition',"=",$finition)
->where('finition.CodeModele','=',$modele)
->where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',">",$Debut)
->where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',"<",$Fin)
->where('finition.CodeMarque','=',$marque)
->count('Commande_nadine.RECID_NADIN');
$PourcentageCommandee=($Commande/$TotalAproduire)*1000;
return $PourcentageCommandee ;
}
else
{
echo "failed";
}
}
公共函数计算器(请求$Request)
{
如果(isset($请求))
{
$marque=$request->get('marque');
$modele=$request->get('modele');
$finition=$request->get('finition');
$destude=$request->get('destude');
$Fin=$request->get('Fin');
$TotalAproduire=100;
$Commande=DB::connection('sqlsrv2')->table('Commande_nadine'))
->join('finition'、'Commande_nadine.CodeFinition'、'='、'finition.CodeFinition')
->其中('finition.CodeFinition',“=”,$finition)
->其中('finition.CodeModele','=',$modele)
->其中('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',“>”,$处女秀)
->where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS'),“如果这是一种ajax调用路由,为什么不将其作为post请求并轻松发送数据呢。
$.ajax({
类型:“POST”,
url:url,
数据:数据,
成功:成功,
数据类型:数据类型
});
你可以这样制作你的数据
var myData = {
id: '{{ $myPost->id }}',
somethingElse: '{{ $someOtherThing }}'
}
如果是ajax调用路由,为什么不将其作为post请求并轻松发送数据呢。
$.ajax({
类型:“POST”,
url:url,
数据:数据,
成功:成功,
数据类型:数据类型
});
你可以这样制作你的数据
var myData = {
id: '{{ $myPost->id }}',
somethingElse: '{{ $someOtherThing }}'
}
首先,消除变量命名的不一致性。不要像以前那样混合变量命名,你有一个以大写字母开头,另一个不以大写字母开头!这很容易出错
我已将您的php重构为所有小写变量,并返回json-因此它将对javascript友好:
PHP:
if(isset($request))
{
$marque = $request->get('marque');
$modele = $request->get('modele');
$finition = $request->get('finition');
$Debut = $request->get('debut');
$Fin =$request ->get('fin');
$TotalAproduire = 100;
$Commande = DB::connection('sqlsrv2')->table('Commande_nadine')
->join('finition','Commande_nadine.CodeFinition','=','finition.CodeFinition')
->where('finition.CodeFinition',"=",$finition)
->where('finition.CodeModele','=',$modele)
->where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',">",$debut)
->whereDate('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',"<",$fin)
->whereDate('finition.CodeMarque','=',$marque)
->count('Commande_nadine.RECID_NADIN');
$PourcentageCommandee=($Commande/$TotalAproduire)*1000;
return response()->json($PourcentageCommandee);
}
else
{ //return error response with 500 code
response()->json("failed", 500);
}
var periode=$("#Période").val();
var DebutFin = periode.split(' - ');
var Debut = DebutFin[0];
var Fin = DebutFin[1];
var marque = $("#CodeMarque").val();
var modele = $("#CodeModele").val();
var finition = $("#CodeFinition").val();
const data = {debut, fin, marque, modele, finition};
// check if the output is correct! Illegal operator error means you may have done
// an operation that cannot be done to the datatype. E.g. multiplication, division etc
// on a non number datatype
console.log(data);
$.ajax({
url:"home/Calculer", //remove that ugly URL an pass it as data body instead
method:"GET",
data: data, //data body
cache : false,
datatype: "JSON",
processData: false,
success: function(result)
{
console.log(result);
$("#CommandePasses").data('easyPieChart').update(result);
$('span', $("#CommandePasses")).text(result);
},
error: function(err) {
console.log(err);
}
});
首先,消除变量命名的不一致性。不要像以前那样混合变量命名,你有一个以大写字母开头,另一个不以大写字母开头!这很容易出错
我已将您的php重构为所有小写变量,并返回json-因此它将对javascript友好:
PHP:
if(isset($request))
{
$marque = $request->get('marque');
$modele = $request->get('modele');
$finition = $request->get('finition');
$Debut = $request->get('debut');
$Fin =$request ->get('fin');
$TotalAproduire = 100;
$Commande = DB::connection('sqlsrv2')->table('Commande_nadine')
->join('finition','Commande_nadine.CodeFinition','=','finition.CodeFinition')
->where('finition.CodeFinition',"=",$finition)
->where('finition.CodeModele','=',$modele)
->where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',">",$debut)
->whereDate('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',"<",$fin)
->whereDate('finition.CodeMarque','=',$marque)
->count('Commande_nadine.RECID_NADIN');
$PourcentageCommandee=($Commande/$TotalAproduire)*1000;
return response()->json($PourcentageCommandee);
}
else
{ //return error response with 500 code
response()->json("failed", 500);
}
var periode=$("#Période").val();
var DebutFin = periode.split(' - ');
var Debut = DebutFin[0];
var Fin = DebutFin[1];
var marque = $("#CodeMarque").val();
var modele = $("#CodeModele").val();
var finition = $("#CodeFinition").val();
const data = {debut, fin, marque, modele, finition};
// check if the output is correct! Illegal operator error means you may have done
// an operation that cannot be done to the datatype. E.g. multiplication, division etc
// on a non number datatype
console.log(data);
$.ajax({
url:"home/Calculer", //remove that ugly URL an pass it as data body instead
method:"GET",
data: data, //data body
cache : false,
datatype: "JSON",
processData: false,
success: function(result)
{
console.log(result);
$("#CommandePasses").data('easyPieChart').update(result);
$('span', $("#CommandePasses")).text(result);
},
error: function(err) {
console.log(err);
}
});
问题是您正在将数据作为查询字符串参数传递,但没有遵循查询字符串的正确语法。
这就是为什么您会收到HTTP响应错误代码为500的原因,以及显示InvalidArgumentException的错误消息
非法的运算符和值组合。
原因是你写了这个:
url:"home/Calculer?Debut:"+Debut+"&Fin:"+Fin+"&Marque:"+marque+"&Modele:"+modele+"&Finition:"+finition
但应该这样写:
url:"home/Calculer?debut="+Debut+"&fin="+Fin+"&marque="+marque+"&modele="+modele+"&finition="+finition
简而言之,:
操作数(有时用于在JavaScript中声明对象值)不是有效的查询字符串语法。还要注意,PHP中的查询字符串解析为$\u GET
数组超全局中的命名变量,这是Laravel在调用$request->GET(“”);
因此,形成查询字符串的正确规则是:
if(isset($request))
{
$marque = $request->get('marque');
$modele = $request->get('modele');
$finition = $request->get('finition');
$Debut = $request->get('debut');
$Fin =$request ->get('fin');
$TotalAproduire = 100;
$Commande = DB::connection('sqlsrv2')->table('Commande_nadine')
->join('finition','Commande_nadine.CodeFinition','=','finition.CodeFinition')
->where('finition.CodeFinition',"=",$finition)
->where('finition.CodeModele','=',$modele)
->where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',">",$debut)
->whereDate('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',"<",$fin)
->whereDate('finition.CodeMarque','=',$marque)
->count('Commande_nadine.RECID_NADIN');
$PourcentageCommandee=($Commande/$TotalAproduire)*1000;
return response()->json($PourcentageCommandee);
}
else
{ //return error response with 500 code
response()->json("failed", 500);
}
var periode=$("#Période").val();
var DebutFin = periode.split(' - ');
var Debut = DebutFin[0];
var Fin = DebutFin[1];
var marque = $("#CodeMarque").val();
var modele = $("#CodeModele").val();
var finition = $("#CodeFinition").val();
const data = {debut, fin, marque, modele, finition};
// check if the output is correct! Illegal operator error means you may have done
// an operation that cannot be done to the datatype. E.g. multiplication, division etc
// on a non number datatype
console.log(data);
$.ajax({
url:"home/Calculer", //remove that ugly URL an pass it as data body instead
method:"GET",
data: data, //data body
cache : false,
datatype: "JSON",
processData: false,
success: function(result)
{
console.log(result);
$("#CommandePasses").data('easyPieChart').update(result);
$('span', $("#CommandePasses")).text(result);
},
error: function(err) {
console.log(err);
}
});
1) 使用?
运算符打开查询字符串
2) 后跟第一个变量名
3) 后跟=
运算符
4) 后跟变量的值
5) 任何后续变量声明的声明格式与步骤1至4相同,但?
运算符替换为与和运算符问题是您将数据作为查询字符串参数传递,但没有遵循查询字符串的正确语法。
这就是为什么您会收到HTTP响应错误代码为500的原因,以及显示InvalidArgumentException的错误消息
非法的运算符和值组合。
原因是你写了这个:
url:"home/Calculer?Debut:"+Debut+"&Fin:"+Fin+"&Marque:"+marque+"&Modele:"+modele+"&Finition:"+finition
但应该这样写:
url:"home/Calculer?debut="+Debut+"&fin="+Fin+"&marque="+marque+"&modele="+modele+"&finition="+finition
简而言之,:
操作数(有时用于在JavaScript中声明对象值)不是有效的查询字符串语法。还要注意,PHP中的查询字符串解析为$\u GET
数组超全局中的命名变量,这是Laravel在调用$request->GET(“”);
因此,形成查询字符串的正确规则是:
if(isset($request))
{
$marque = $request->get('marque');
$modele = $request->get('modele');
$finition = $request->get('finition');
$Debut = $request->get('debut');
$Fin =$request ->get('fin');
$TotalAproduire = 100;
$Commande = DB::connection('sqlsrv2')->table('Commande_nadine')
->join('finition','Commande_nadine.CodeFinition','=','finition.CodeFinition')
->where('finition.CodeFinition',"=",$finition)
->where('finition.CodeModele','=',$modele)
->where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',">",$debut)
->whereDate('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',"<",$fin)
->whereDate('finition.CodeMarque','=',$marque)
->count('Commande_nadine.RECID_NADIN');
$PourcentageCommandee=($Commande/$TotalAproduire)*1000;
return response()->json($PourcentageCommandee);
}
else
{ //return error response with 500 code
response()->json("failed", 500);
}
var periode=$("#Période").val();
var DebutFin = periode.split(' - ');
var Debut = DebutFin[0];
var Fin = DebutFin[1];
var marque = $("#CodeMarque").val();
var modele = $("#CodeModele").val();
var finition = $("#CodeFinition").val();
const data = {debut, fin, marque, modele, finition};
// check if the output is correct! Illegal operator error means you may have done
// an operation that cannot be done to the datatype. E.g. multiplication, division etc
// on a non number datatype
console.log(data);
$.ajax({
url:"home/Calculer", //remove that ugly URL an pass it as data body instead
method:"GET",
data: data, //data body
cache : false,
datatype: "JSON",
processData: false,
success: function(result)
{
console.log(result);
$("#CommandePasses").data('easyPieChart').update(result);
$('span', $("#CommandePasses")).text(result);
},
error: function(err) {
console.log(err);
}
});
1) 使用?
运算符打开查询字符串
2) 后跟第一个变量名
3) 后跟=
运算符
4) 后跟变量的值
5) 所有后续变量声明的声明格式与步骤1至4相同,但?
运算符被替换为一个符号和&
运算符一句忠告。始终确保使用正确的字母大小写。抱歉,没有收到您的建议发送的变量以大写字母开头”&品牌:“+品牌+”&模型:"+modele
但您需要的是marque
,modele
…我已经解决了这个问题,但仍然不起作用!这个问题出现在首秀和Fin中,它们是日期!问题是您的URL语法对于查询字符串无效。有关具体细节,请参阅我的答案。一句忠告。请务必确保您使用正确的字母大小写。对不起,didn未收到您的通知您发送的变量以大写字母“&Marque:+Marque+”&Modele:”开头+modele
但您需要的是marque
,modele
…我修复了这个问题,但仍然不起作用!这个问题出现在首秀和Fin中,它们是日期!问题是您的URL语法对于查询字符串无效。有关具体细节,请参阅我的答案。这种方法也可以起作用。作为POST请求发送数据并更改Laravel接收数据的方式。@adis我想问题主要在于where('Commande_nadine.DATE_DOCUMENT_CMD_ACHAT_FRS',“>”,$处女秀),因为DATE_DOCUMENT_CMD_ACHAT_FRS和处女秀是日期,但处女秀是作为字符串发送的,从数据库检索到的日期被视为字符串2,所以compa