Я использую много jQuery в проекте, над которым я работаю.
У меня есть функция javascript, которая делает запрос ajax контроллеру, который возвращает данные в JSON.
Я хотел бы показать удобное для пользователя сообщение, информирующее пользователя о том, что у него / нее еще нет информации. Но я смущен тем, как отправить ответ в JSON, чтобы моя функция javascript могла определить, будет ли у пользователя отображаться информация.
Вот моя функция javascript:
function latest_pheeds() { var action = url+"pheeds/latest_pheeds"; $('#pheed-stream').html('<div class="loading"></div>'); $('.loading').append('<img src="'+pheed_loader_src+'" />'); $.ajax({ url:action, type:'GET', dataType:'json', error: function () { }, success:function(data) { $('.loading').fadeOut('slow'); $.each(data,function(index,item) { $('#pheed-stream').append ( '<div class="pheed" id="'+item.pheed_id+'">'+ '<p><a class="user_trigger" href="users/info/'+item.user_id+'">' +item.user_id+'</a></p>'+ '<p>'+item.pheed+'</p>'+ '<div class="pheed_meta">'+ '<span>'+item.datetime+' Ago</span>'+ '<span class="cm">'+item.comments+ '<img class="comment_trigger" src="/pheedbak/assets/img/comment.png" title="Click to comment on pheed" onclick="retrieve_comments('+item.pheed_id+')">'+ '</span>'+ '<span>'+item.repheeds+ ' Repheeds'+ '<img class="repheed_trigger" src="/pheedbak/assets/img/communication.png" title="Click to repheed" onclick="repheed('+item.pheed_id+')">'+ '</span>'+ '<span>'+ 'Favourite'+ '<img class="favourite_trigger" src="/pheedbak/assets/img/star.png" title="Click to make this a favourite" onclick="favourite_pheed('+item.pheed_id+')" />'+ '</span>'+ '</div>'+ '</div>' ); }); } }); }
И heres контроллер функции запрос ajax делается для
function latest_pheeds() { //Confirm if a user is logged before allowing access if($this->isLogged() == true) { //load the pheed model for database interaction $this->load->model('pheed_model'); //load user model $this->load->model('user_model'); //load comment model $this->load->model('comment_model'); //store the pheeds to a the $data variable $data = $this->pheed_model->get_latest_pheeds(); //Load the date helper to calculate time difference between post time and current time $this->load->helper('date'); //Current time(unix timetamp) $time = time(); //pheeds $pheeds = array(); if(count($data) > 0 ) { foreach($data as $pheed) { $row['pheed_id'] = $pheed->pheed_id; $row['user_id'] = $this->user_model->return_username($pheed->user_id); $row['pheed'] = $pheed->pheed; $row['datetime'] = timespan($pheed->datetime,$time); $row['comments'] = $this->comment_model->count_comments($pheed->pheed_id); $row['repheeds'] = $pheed->repheeds; $pheeds[] = $row; } echo json_encode($pheeds); $response['response'] = "Ok"; $res[] = $response; echo json_encode($res)."\n"; } } else { }
Он генерирует вывод JSON, но синтаксис нарушен, поэтому я не могу его прочитать с помощью javascript, но как только я избавлюсь от следующего кода из приведенного выше метода, он работает нормально
$response['response'] = "Ok"; $res[] = $response; echo json_encode($res)."\n";
Вы должны использовать json_encode ($ data) один раз в ответе, если вы хотите вывести больше материала, вам нужно объединить свои данные в один массив и отправить его.
РЕДАКТИРОВАТЬ: Чтобы быть ясным, один из способов сделать это можно следующим образом:
echo json_encode(array('pheeds' => $pheeds, 'res' => $res));
Затем в JS вы получите массив с ключами «pheeds» и «res».
Хотя это может иметь мало практического значения, я бы также рекомендовал сделать это, прежде чем вы эхо кодировке json закодировали:
header('Content-Type: application/json');