2011-09-03 33 views
7

Üzerinde çalıştığım bir projede çok fazla jQuery kullanıyorum.Kodlama yanıtı gönderme json

JSON'da veri döndüren bir denetleyiciye ajax isteği yapan bir javascript işlevim var.

Kullanıcıya, henüz bilgi saklanmadığını bildiren kullanıcı dostu bir mesaj görüntülemek istiyorum. Ancak JSON'ta bir yanıtın nasıl gönderileceği konusunda kafam karıştı, bu yüzden javascript işlevim kullanıcının görüntülenecek bilginin olup olmadığını belirleyebilir. İşte

benim javascript fonksiyonudur: heres kontrolör fonksiyonu ajax isteği

Bu JSON çıktısını üretir
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 { 

    } 

yapılır

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>' 
      ); 
     }); 
     } 
    }); 
} 

Ve fakat sözdizimi öylesine bozuldu i okuyun cant javascript, ile ama yukarıdaki yöntemden aşağıdaki kodu kurtulmak bir kez normal olarak çalışır

$response['response'] = "Ok"; 
    $res[] = $response; 
    echo json_encode($res)."\n"; 
+0

i HTTP başlığı yerine web sayfasında sadece json veri gönderebilir? – Rajan

cevap

14

Bir yanıtta sadece json_encode ($ data) kullanmanız GEREKMEKTEDİR; daha fazla ürün çıkışı istiyorsanız, verilerinizi tek bir dizide birleştirmeniz ve göndermeniz gerekir.

DÜZENLEME:

echo json_encode(array('pheeds' => $pheeds, 'res' => $res)); 

Sonra JS Anahtarlar "pheeds" ve "res" ile bir dizi alacak: tek yön Eğer böyle ise yapabileceği, Açık olmak gerekirse.

çok az pratik önemi olsa da, ben de size json kodlanmış dize yankı önce bunu öneriyoruz:

header('Content-Type: application/json');