2011-06-02 63 views
0

我真的不能解決這裏發生了什麼。我正在使用jQuery load()方法來替換頁面中的一些HTML。在這種情況下,它將用用戶從列表中選擇的一個替換當前消息。 除了一件重要的事情之外,它們都按預期工作。當HTML返回時,它已經在其他任何地方添加了「ARRAY」這個詞。沒有其他信息(比如你會從var_dump()獲得)並且沒有標籤。從字面上看,大寫字母就是這個詞!如果我不使用AJAX加載視圖,那麼它按預期呈現。唯一的區別是請求是通過AJAX進行的。下面是相關的代碼:非常奇怪的行爲與CodeIgniter的jQuery加載()

JS:(全部包裹在準備())

$('.message_summary').click(function() { 
     // get message id 
     id = $(this).attr('id'); 

     // load the new message first so that user can get on with reading it 
     $('#message_window').load($.baseurl+'messages/get_message/'+id); 

     // mark as read 
     $.get($.baseurl+'messages/ajax/mark_as_read/'+id); 

     // get current tag id 
     $.get($.baseurl+'messages/get_current_tag', 
      function(data){ 
          // get the message count 
          $.get($.baseurl+'messages/ajax/set_new_message_count/'+data, 
            function(msg_count) 
            { 
             $('.new_message_count_'+data).html(msg_count); 
            } 
           ); 
      });   
}); 

CI控制器:

public function get_message($message_id=false) 
    { 
     if($message_id) 
     {    
      // get an individual message and prepare for display 
      $message = $this->messages_m->get_single_message($message_id); 

      foreach($this->tags['id'] as $index => $tag) 
      { 
       $tag_options[$tag] = $this->tags['tag_name'][$index]; 
      } 


      $main_message = array(
            'message_id' => $message_id, 
            'tag_name'  => $message->tag_name, 
            'tag_options' => $tag_options, 
            'sender' => $message->first_name.' '.$message->last_name, 
            'date_received' => date($this->config->item('date_time_format'), $message->created_at), 
            'subject' => $message->subject, 
            'content' => $message->message 
           );          
      if($this->input->is_ajax_request()) 
      { 
       return $this->load->view('partials/message_view', $main_message); 
      } 
      else 
      { 
       return $this->load->view('partials/message_view', $main_message, true); 
      } 
     } 

視圖文件僅僅是HTML一些PHP變量。

任何人有任何想法?!?!

+0

我以前沒有使用CI,但我使用了其他PHP MVC框架。是否有一個主要模板用於包含單詞'ARRAY'的ajax視圖渲染。另外,你可以搜索你的項目(大多數編輯/ IDE都有這種能力),並搜索大寫字「ARRAY」。 – devmatt 2011-06-02 17:39:20

+0

你在調試方面有什麼嘗試?例如,當你退出('Something')'作爲第一行時會發生什麼?我無法根據您發佈的內容看到任何解釋,並且如果有其他人可以感到驚喜。 – 2011-06-02 17:48:34

+0

感謝@devmatt的建議,但我不認爲這是問題所在。首先,我已經完成了整個項目的搜索,沒有出現。其次,當視圖從AJAX加載時,它不會經歷任何類型的模板。當第一次加載頁面時,相同的視圖加載沒有問題,只有在AJAX加載時纔會出錯。 – musoNic80 2011-06-02 17:48:40

回答

3

我將盡力幫助您在答案中進行調試,而不是埋在評論中。

我們已經嘗試if($this->input->is_ajax_request()) exit('Hello');作爲get_message()的第一行,輸出是Arrayhello。這讓我相信,在某個地方,你正在檢查AJAX請求和某個數組,因爲如果你嘗試這樣做會發生什麼。

我的第一個建議:回到你的__construct()在同一個控制器,並做同樣的事情。如果你仍然得到相同的結果,可以回到更遠的地方,也許去一個正在使用的庫。如果你不要看到Array了,開始使用退出代碼在道路的更遠處,直到你找到一個似乎觸發的點。 FYI既然你說你是新手的調試代碼的概念,這不是的調試方式,它只是一種方式。

另外,從您的評論看來,您現在得到Array而不是大寫版本?這很奇怪,聽起來不對。確保您正在閱讀Firebug中的實際響應,而不是頁面中屏幕上顯示的內容。

除了:一個小便利頂端(這是我做的):設置$this->input->is_ajax_request()爲常數像IS_XHRAJAX就像在你的索引的地方,常量文件,或配置。它只是使工作更容易。在一個請求中,請求是否會從ajax變爲非ajax?不,只需在system/core/Input.php中查看它的源代碼,它非常簡單。例如:

define('AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest'); 

這實際上是Input類所做的,雖然它有點混淆。現在你可以使用:

if (AJAX) do_ajax_stuff(); 

只是個人偏好,但我覺得它非常有幫助 - 而且它使用的資源略少。