Обработка 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, или почту отдельно
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);
}
});
И теперь в консоли должно появиться правильное значение бюллетеня и почты.
Несмотря на то, что у вас уже есть решение, я даю вам рекомендацию (счастливое лицо).
Следующий код содержит вызов 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.
Вы можете сохранить строку следующим образом:
success : function(data) {
console.log(data.cedula);
console.log(data.email);
}