Скрипт JQuery загружается неправильно - PullRequest
1 голос
/ 22 января 2012

Я получил один контроллер с именем Profile с несколькими функциями, такими как get_user_timeline и do_upload. get_user_timeline загружается в profile_view с помощью вызова ajax из JQuery. Его функциональность заключается в том, чтобы тянуть временную шкалу твиттера каждые 60 секунд.

Это работало хорошо после того, как я поместил форму в представление для вызова функции do_upload. Функцией do_upload является загрузка файла, такого как изображение или mp3 на сервер. Я включил проверку формы в эту функцию, чтобы, когда пользователь не заполнил всю страницу, он / она перенаправил обратно на profile_view с некоторым предупреждением. Я сделал это, вызвав $this->index() в функции do_upload.

Когда я проверил свой код, я отправил форму с несколькими данными, оставленными пустыми. profile_view загружен с хорошим предупреждением об ошибке проверки формы, но, похоже, мой 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
}

ВИД

<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>

1 Ответ

1 голос
/ 22 января 2012

ОК, я думаю Я понимаю, что здесь происходит.

Вместо вызова $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, потому что он будет автоматически очищен при следующем запросе. Возможно, вы захотите изучить написание или принятие какой-либо библиотеки отзывов / сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...