我的对象将null从Ajax传递到php

时间:2019-01-19 14:01:27

标签: javascript php ajax laravel

我正在尝试通过Ajax将一些数据从JS传递到PHP,但是由于使用了我的数据,因此出现错误,因为它们为空。

该问题涉及两个对象:DebutFin

我的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

您能解决这个问题吗?

3 个答案:

答案 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 }}'
}