Javascript 我的对象正在将null从Ajax传递到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

我试图通过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 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