poltergeist: jquery ajax не принимает одно из двух равных ответов - PullRequest
0 голосов
/ 06 июля 2018

работа с symfony 2.8 Я пытаюсь сделать AJAX-вызов контроллера, который возвращает JSON, содержащий один массив.

Controler:

public function seguimientoAction(Request $request){
    $idUnico = $request->query->get('plan-id'); 
    $em = $this->getDoctrine()->getManager();
    $idPlan =  $em->getRepository('UsuariosBundle:Plan')->findOneByIdUnico($idUnico);
    $seguimientos = $em->getRepository('UsuariosBundle:Seguimiento')->findByPlan($idPlan);


    $contenedor = array();
    foreach ($seguimientos as $seguimiento){
        $fecha = $seguimiento->getFecha();
        $fecha = $fecha->format('d-m-y');

        $peso = $seguimiento->getPeso();

        $contenedor[] = ['fecha' => $fecha, 'peso' => $peso];
    }

    return new JsonResponse($contenedor);
 }

JAVASCRIPT:

var selectorSeguimiento = $(".plan-seguimiento"); 

    selectorSeguimiento.click(function(event){
        event.preventDefault();

        var planid = $(this).attr("data-id");

            $.ajax({
                type: "POST",
                dataType: 'json',
                ContentType: 'application/json',
                url: Routing.generate('usuarios_dashboard_planes_seguimiento', {planid}),
                success: function(data){
                    console.log(data);-------------------------------->LOG 1

                    var arrayPeso = [];
                    var arrayFecha = [];

                    for(var i in data){
                        arrayPeso.push(data[i].peso);
                        arrayFecha.push(data[i].fecha);
                    }
                    console.log(arrayPeso);------------------------>LOG 2
                    console.log(arrayFecha);----------------------------->LOG 3
                }
            });
        });

Если я напишу URL, который вызывает контроллер в браузере, я смогу увидеть это:

[{ "Fecha": "26-02-18", "песо": "67,0"}, { "Fecha": "28-02-18", "песо": "66,0"}, {» Fecha ":" 03-03-18" , "песо": "64,0"}]

Итак, я понимаю, что проблема в том, что javascript не принимает данные ..., но ... ... если я изменю массив в контроллере и сделаю идентичный массив "artesanal way" ...

Controler (тест):

public function seguimientoAction(Request $request){
    $idUnico = $request->query->get('plan-id'); 
    $em = $this->getDoctrine()->getManager();
    $idPlan = $em->getRepository('UsuariosBundle:Plan')->findOneByIdUnico($idUnico);
    $seguimientos = $em->getRepository('UsuariosBundle:Seguimiento')->findByPlan($idPlan);


    $miarray = array(
        array('fecha'=>'26-02-18', 'peso'=>'67.0'), 
        array('fecha'=>'28-02-18', 'peso'=>'66.0'),
        array('fecha'=>'03-03-18', 'peso'=>'64.0'),
    );


    return new JsonResponse($miarray);
}   

... Я получаю это:

Array (3) [{…}, {…}, {…}] локальный: 90: 25

Array (3) ["67,0", "66,0", "64,0"] локальный: 99: 25

Array (3) ["26-02-18", "28-02-18", "03-03-18"] локальный: 100: 25

И для дополнительной проверки я возвращаюсь к вызову через браузер и получаю это:

* +1032 * [{ "Fecha": "26-02-18", "песо": "67,0"}, { "Fecha": "28-02-18", "песо": "66,0"}, {» Fecha ":" 03-03-18" , "песо": "64,0"}]

Точно так же, как в другом случае

Итак, вопрос в том, почему метод jquery ajax «любит» ответ со вторым массивом и «не любит» первый (являющийся тем же массивом)?

EDIT: Здесь вы можете увидеть var_dump () массивов перед json_encode ():

Массив $ конденсатор

array(3) {
  [0]=>
  array(2) {
    ["fecha"]=>
    string(8) "26-02-18"
    ["peso"]=>
    string(4) "67.0"
  }
  [1]=>
  array(2) {
    ["fecha"]=>
    string(8) "28-02-18"
    ["peso"]=>
    string(4) "66.0"
  }
  [2]=>
  array(2) {
    ["fecha"]=>
    string(8) "03-03-18"
    ["peso"]=>
    string(4) "64.0"
  }
}

Array $ miarray

array(3) {
  [0]=>
  array(2) {
    ["fecha"]=>
    string(8) "26-02-18"
    ["peso"]=>
    string(4) "67.0"
  }
  [1]=>
  array(2) {
    ["fecha"]=>
    string(8) "28-02-18"
    ["peso"]=>
    string(4) "66.0"
  }
  [2]=>
  array(2) {
    ["fecha"]=>
    string(8) "03-03-18"
    ["peso"]=>
    string(4) "64.0"
  }
}

Ответы [ 2 ]

0 голосов
/ 08 июля 2018

Вы должны передать параметры в Routing как действительный объект javascript, изменив эту строку:

Routing.generate('usuarios_dashboard_planes_seguimiento', {planid})

по:

Routing.generate('usuarios_dashboard_planes_seguimiento', {'plan-id': planid})

0 голосов
/ 06 июля 2018

Посмотрите на заголовки запроса. Является ли тип содержимого, возвращаемый сервером, одинаковым в обоих случаях?

Вы также можете на мгновение попробовать удалить dataType: 'json', чтобы jquery "Guess"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...