2011-09-03 27 views
7

Sto utilizzando un sacco di jQuery in un progetto su cui sto lavorando.Invio della risposta di codifica in JSON

Ho una funzione javascript che effettua una richiesta Ajax a un controller che restituisce dati in JSON.

Vorrei visualizzare un messaggio user friendly che informa l'utente che non ha ancora informazioni memorizzate. Ma sono confuso su come inviare una risposta in JSON così la mia funzione javascript può determinare se l'utente ha informazioni da visualizzare.

Qui è la mia funzione 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>' 
      ); 
     }); 
     } 
    }); 
} 

Ed ecco la funzione di regolazione della richiesta AJAX è fatta per

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 { 

    } 

Esso genera l'uscita JSON, ma la sintassi è rotto così non posso leggere con javascript, ma una volta che ho eliminato il seguente codice dal metodo precedente funziona normalmente

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

posso inviare solo i dati JSON nell'intestazione HTTP al posto della pagina web? – Rajan

risposta

14

È necessario utilizzare solo json_encode ($ data) una volta in una risposta, se si desidera generare più materiale, è necessario unire i dati in un array e inviarlo.

EDIT: Per essere chiari, in un modo che si potrebbe fare è come questo:

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

Poi nel JS si otterrà un array con i tasti "pheeds" e "res".

Anche se può essere di scarso significato pratico, vorrei anche consiglia di fare questo prima di echo il JSON stringa codificata:

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