2012-01-22 23 views
1

というコントローラがあり、その中にget_user_timelinedo_uploadのようないくつかの機能があります。 get_user_timelineは、JQueryからajax呼び出しでprofile_viewにロードされます。それは60秒ごとにtwitterタイムラインを引き出す機能です。JQueryスクリプトが正しく読み込まれていない

私はdo_upload関数を呼び出すためにビューにフォームを入れた後、うまく動作していました。 do_upload機能は、画像やmp3などのファイルをサーバーにアップロードする機能です。私はフォームの検証をその関数に入れました。ユーザーがその全体からいっさいを記入しなかったときには、何らかの警告をもってprofile_viewにリダイレクトされます。私はdo_upload機能の$this->index()と呼んでそれを行いました。

私のコードをテストしたとき、私はいくつかの入力を空白のままにしてフォームを提出しました。 profile_viewは素晴らしいフォーム検証エラー警告がロードされていますが、JitterはTwitterのタイムラインを表示しないため、Jqueryはもう動作しません。私はURLをチェックした。それはhttp://localhost/myproject/profile/do_uploadの代わりにhttp://localhost/myproject/profileと言う。それはCIのデフォルトの動作ですか?それに対処する方法?私のJqueryはhttp://localhost/myproject/profileとしか動作しないようですが、アドバイスを教えてもらえますか?ありがとう

ここに私のコードです。 プロファイルコントローラ

<?php 

class Profile extends CI_Controller 
{ 
    function __construct() 
    { 
     parent::__construct(); 

     $this->load->library('tweet'); 
     $this->load->library('form_validation'); 
     $this->load->model('user_model'); 

    } 

    function index() 
    { 
     if($this->session->userdata('is_logged_in') == TRUE) 
     { 

      $data['biography'] = $this->user_model->get_user_by_id($this->session->userdata('user_id')); 


      $data['user'] = $this->tweet->call('get', 'users/show', array('id' => $this->session->userdata('user_id'))); 

      $data['main_content'] = 'private_profile_view'; 
      $this->load->view('includes/template', $data); 
     } 
     else 
     { 

      redirect('welcome'); 
     } 
    } 


    /** timeline features **/ 
    function get_home_timeline() 
    { 
     $timeline = $this->tweet->call('get', 'statuses/home_timeline'); 
     echo json_encode($timeline); 

    } 


//the do_upload function 
function do_upload() 
    { 
     $config['upload_path'] = './media/'; 
     $config['allowed_types'] = 'mp3'; 
     $config['max_size'] = '30720'; 

     $this->load->library('upload', $config); 
     //set validation rules 
     $this->form_validation->set_rules('title', 'Song title', 'trim|required|xss_clean'); 
     $this->form_validation->set_rules('album', 'Album', 'trim|required|xss_clean'); 
     $this->form_validation->set_rules('artist', 'Artist', 'required|xss_clean'); 
     $this->form_validation->set_rules('song_license_agreement', 'License', 'required|xss_clean'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $this->index(); //this return the warning but make my Jquery fail 
     } 
    } 

.JS

$(document).ready(function(){ 


       update_timeline('profile/get_home_timeline', '#home_timeline ul', 'home'); //this is call to the timeline, this won't work if i submit the upload form 

}); 

function update_timeline() 
{ 
    //my ajax call goes here 
} 

VIEW

<div id="timeline" class=""> 
      <ul> 
       <li><a href="#home_timeline" id="home_timeline_menu">Home</a></li> 
       <li><a href="#user_timeline" id="user_timeline_menu">MyStatus</a></li> 
       <li><a href="#mentions_timeline" id="mentions_timeline_menu">@me</a></li> 
      </ul> 
      <section id="home_timeline"> 
       <ul> 
        <!-- this is where the timeline goes --> 
       </ul> 
      </section> 
<div> 
<!-- and this is the form --> 
<article id="music_upload_form"> 

       <?php echo validation_errors(); ?> 
       <?php echo form_open_multipart('profile/do_upload');?> 
       <input type="hidden" id="user_id" name="user_id" value="<?php echo $user->id_str;?>" /> 
       <label for="title">Song Title</label> 
       <input type="text" name="title" id="title" size="30" value="<?php echo set_value('title'); ?>"/><br /> 
       <label for="album"> Album Title </label> 
       <input type="text" name="album" id="album" size="30" value="<?php echo set_value('album'); ?>"/><br /> 
       <label for="artist">Artist</label> 
       <input type="text" name="artist" id="artist" size="20" value="<?php echo set_value('artist'); ?>"/><br /> 
       <input type="file" name="userfile" size="20" /><br /> 
       <input type="radio" name="owner" id="license" value="<?php echo set_value('owner'); ?>"/>I AM the artist/owner of this song and I have the right for distribution<br /> 
       <input type="radio" name="licensed_user" id="license" value="<?php echo set_value('licensed_user');?>"/>I AM NOT the artist/owner of this song BUT I have the right for distribution</br> 
       <input type="checkbox" name="song_license_agreement" value="<?php echo set_value('song_license_agreement');?>"/>By selecting this option, I swear that all information entered is right<br /> 
       <input type="submit" value="Upload Your Song" /> 
       </form> 
      </article> 
+0

アップ、申し訳ありません。私の英語は悪いです。私は自分のコードを投稿します。私はあなたの解決策を試しました: – under5hell

+0

@Madmartigan:私はいくつかの編集を行いました、うまくいけば今理解しやすくなります – nico

+0

@nicoありがとう:-) – under5hell

答えて

1

OK、私はが、私はここで何が起こっているかを得ると思います

$this->index()を呼び出す代わりに、現在のバージョンでindex()メソッドを実行するだけで、代わりにユーザーをリダイレクトします。

function do_upload() 
{ 
    if ($error) 
    { 
     redirect('profile'); 
    } 
} 

$this->index()を呼び出すと、実際にはURLまたは現在の方法を変更しない、それはちょうどあなたがそこに持っているものは何でもコードを実行します。あなたのビューで

$this->session->set_flashdata('errors', validation_errors()); 

その後:

エラーが次のページに表示するために取得するには、セッションアイテムに割り当てることができます

echo $this->session->flashdata('errors'); 

それが自動的になりますので、私はflashdataを使用次の要求でクリアされます。あなたは書面を調べたり、ある種のフィードバック/メッセージライブラリを採用したいかもしれません。

+0

私はあなたの解決策を試みました。それは動作し、タイムラインを表示します。しかし、今、フォームエラーは表示されません... T_T – under5hell

+0

私はあなたが意味するものを参照してください、編集を参照してください。 –

+0

男、あなたは上司です!できます!!ありがとうございました :-) – under5hell

関連する問題