我正在尝试通过Ajax将一些数据从JS传递到PHP,但是由于使用了我的数据,因此出现错误,因为它们为空。
该问题涉及两个对象:Debut
和Fin
。
我的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";
}
}
转到我的URL进行测试时,出现以下错误:InvalidArgumentException
Illegal operator and value combination.
,并且我的主页发送了一个500 internal server error
。
您能解决这个问题吗?
答案 0 :(得分:2)
首先,删除变量命名不一致。 请勿像您一样混合变量名,您只有一种会启动资本,而另一种却不会!这容易出错。
我已经将您的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);
}
放入data
属性中,而不是将URL中的数据作为查询发送。它将作为正文数据发送。也请在console.log(data);
之前加入Ajax,以确保其值正确。我还在代码中提供了解释,我希望这是可以自我解释的。
JS:
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 :(得分:1)
问题是您将数据作为查询字符串参数传递,但是没有遵循查询字符串的正确语法。
这就是为什么您收到500的HTTP响应错误代码和显示InvalidArgumentException
Illegal operator and value combination.
原因是您写的是这个
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中的查询字符串会解析为$_GET
超级全局数组中的命名vars,这是Laravel在调用$request->get('<variable name>');
因此,构成查询字符串的正确规则是:
1)使用?
运算符打开查询字符串
2)后跟第一个变量名称
3)后跟=
运算符
4)后跟变量的值
5)任何后续变量声明都以与步骤1到4相同的格式声明,除了将?
运算符替换为与号&
运算符
答案 2 :(得分:0)
如果这是ajax调用路由,为什么不直接将其发送为发布请求并轻松发送数据。
$.ajax({
type: "POST",
url: url,
data: data,
success: success,
dataType: dataType
});
您可以像这样使数据
var myData = {
id: '{{ $myPost->id }}',
somethingElse: '{{ $someOtherThing }}'
}