Мои объекты передают ноль от Ajax до php - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь передать некоторые данные из JS в PHP через Ajax, но у меня возникает ошибка при использовании моих данных, потому что они нулевые.

Проблема касается двух объектов: 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.

Можете ли вы помочь решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Во-первых, удалите несогласованность имен переменных. НЕ СМЕШАЙТЕ ПЕРЕМЕННОЕ НАЗВАНИЕ, КАК ВЫ СДЕЛАЛИ, У ВАС ЕСТЬ ОДИН, КОТОРЫЙ НАЧИНАЕТ КАПИТАЛ И ОДИН, КОТОРЫЙ НЕ СУЩЕСТВУЕТ! Это подвержено ошибкам.

Я рефакторил ваш 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);
}

Вместо того, чтобы отправлять ваши данные в URL-адресе как запрос, введитеdata собственность.Он будет отправлен как данные тела.Пожалуйста, также 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);
        }
    });
0 голосов
/ 19 января 2019

Проблема в том, что вы передаете свои данные в виде параметров строки запроса, но не соблюдаете правильный синтаксис для строк запроса.

Вот почему вы получаете ошибку ответа HTTPкод 500 и сообщение об ошибке, которое говорит 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, который Laravel использует при вызове $request->get('<variable name>');

Так что правильные правила для формирования вашей строки запросаявляются:

1) Открыть строку запроса с оператором ?

2) После чего следует имя первой переменной

3) После = operator

4) Далее следует значение переменной

5) Все последующие объявления переменных объявляются в том же формате, что и шаги с 1 по 4, за исключением того, что оператор ? заменяется амперсандом & оператор

0 голосов
/ 19 января 2019

, если это маршрут вызова ajax, почему бы вам просто не сделать запрос на отправку и легко отправить ваши данные.$.ajax({ type: "POST", url: url, data: data, success: success, dataType: dataType });

, и вы можете сделать свои данные вот так

var myData = {
   id: '{{ $myPost->id }}',
   somethingElse: '{{ $someOtherThing }}'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...