Обработка JSON encode ($data) через ajax jquery


я работаю с ajax, jquery и php; я отправляю запрос ajax в php через post следующим образом:

function obtenermail() {
    //console.log($('#destinatario').val());
    var ced = $('#destinatario').val();
    $.ajax({
        type: "POST",
        data: { 'cedula': $('#destinatario').val()},
        url: "<?php echo site_url();?>"+"/roles/obtenercorreo", 
        success : function(data) {
            console.log(data);

        }
    });
}

в php у меня есть следующая функция:

public function obtenercorreo(){
    if($this->session->userdata('logueado')){
        $ced = $this->input->post('cedula');
        $data = $this->persona_model->getPersonaced($ced);
        echo json_encode($data);
    }else{
        redirect('','refresh');
    }
}

запрос работает правильно, он показывает мне исправление следующим образом:

[{"cedula":"1100253986","nombres":"SOTO CASTILLO LAURO HERNAN","mod_laboral":"CONTRATO COLECTIVO","email":""}]

то, что я не знаю, как получить каждое значение отдельно, так как если я поставлю

console.log(data[0])
console.log(data.cedula)
console.log(data['cedula'])

возвращает мне undefined или пустую строку .

мой вопрос: как я могу сделать, чтобы прочитать каждый отдельный элемент? т. е. получить cedula, или почту отдельно

Author: Juan Pinzón, 2016-03-01

3 answers

Прямо сейчас вы рассматриваете его как строку, вы должны проверить / обработать эту строку как JSON (с JSON.parse), и тогда вы сможете легко получить доступ к данным.

Изменения в коде JavaScript будут выглядеть так:

$.ajax({
    type: "POST",
    data: { 'cedula': $('#destinatario').val()},
    url: "<?php echo site_url();?>"+"/roles/obtenercorreo", 
    success : function(data) {
        var datos = JSON.parse(data);
        console.log(datos[0].cedula);
        console.log(datos[0].email);
    }
});

И теперь в консоли должно появиться правильное значение бюллетеня и почты.

 6
Author: Alvaro Montoro, 2016-03-01 20:50:35

Несмотря на то, что у вас уже есть решение, я даю вам рекомендацию (счастливое лицо).

Следующий код содержит вызов AJAX на URL-адрес, который вы хотите, и решение, которое я предлагаю @Alvaro Montoro. Чтобы улучшить практику вашего запроса, я рекомендую вам добавить в свой код только 2 строки и удалить 1.

Первая строка для добавления будет в Js, потому что вы скажете jQuery, какой тип контента вы ожидаете (в данном случае JSON), чтобы вы избегали парсирования данных, потому что вы получаете его как такой (в JSON).

Решение

$.ajax({
    type: 'POST',
    dataType: 'json',
    data: { 'cedula': $('#destinatario').val() },
    url: "<?php echo site_url(); ?>/roles/obtenercorreo", 
    success : function(data) {
        console.log(data[0].cedula);
        console.log(data[0].email);
    }
});

Вторая строка находится на стороне сервера, что он делает, это возвращает в запросе тип содержимого, содержащего ответ (JSON).

header('Content-Type: application/json');
echo json_encode($data);

Благодаря этому типу практики вы можете обнаружить ошибки, например, когда сервер не отвечает на JSON, чтобы обрабатывать его по-разному, что в этом случае вызовет функцию ошибка AJAX.

 5
Author: Chofoteddy, 2016-03-03 18:47:09

Вы можете сохранить строку следующим образом:

success : function(data) {
        console.log(data.cedula);
        console.log(data.email);
    }
 1
Author: Josh_zarate, 2016-03-01 22:33:50