Проблема с передачей данных на несколько страниц в коде воспламенителя для JQuery - PullRequest
0 голосов
/ 25 марта 2011

В настоящее время моя команда и я работаем с Code Igniter 1.7.3, и мы не можем использовать воспламенитель кода 2.0 с нашим проектом.

Во всяком случае,

Я сделал несколько файлов php, в которых один из основных файлов использует JQuery для загрузки других файлов внутри определенного div в основном файле. Например, примерно так (они оба находятся в папке views в CI)

<!DOCTYPE HTML>
<html>

<head>





<script type="text/javascript" src="<?php echo base_url().''?>public/scripts/jquery-1.4.4.min.js"></script>

<script type="text/javascript">

$(document).ready(function(){



    $("#insert-activity").load("<?php echo base_url().''?>system/application/views/bio.php");


});


</script>

<title>Title</title>

</head>

<body>

<div id="insert-activity"></div>



</body>


</html>

Теперь он отлично загружается. Проблема в том, что контроллер загружает профиль

<?php

class UserProfile extends Controller {

    function UserProfile()
    {
        parent::Controller();
    }

    function index()
    {
        $this->load->library('DX_Auth');
        $this->load->helper('url');
        $this->load->helper('form');
        $this->load->model('userprofile_m');
        $userID = $this->dx_auth->get_user_id();

        $friend_ids = $this->userprofile_m->get_friends_ids($userID);

        $data['interest'] = $this->userprofile_m->get_user_intersts($userID);
        //$data['broadcasts'] = $this->userprofile_m->get_broadcasts($userID);
        $data['friendID'] = $friend_ids;
        //$data['friendsBroadcasts'] = $this->userprofile_m->get_friends_broadcasts($userID,$friend_ids);
        $this->load->view('profile', $data);




    } ?>

Проблема здесь в том, что я хочу, чтобы некоторые из полученных данных перешли в bio.php, потому что profile.php загрузит bio.php в div.

И каждый раз, когда я нажимаю на ссылку get bio, я хочу, чтобы она снова получала информацию и помещала ее в bio.php, пока JQuery загружает bio.php в profile.php

Вот био.php на всякий случай

<!-- PHP should insert the user's bio here -->



<div id="activity-header" class="background"> <!-- activity header start DO NOT MODIFY-->

<h1>Bio</h1>

</div> <!-- activity header end DO NOT MODIFY-->



<div id="activity-feed"> <!-- activity div for JQuery  DO NOT STYLE THIS DIV-->

<div> <!-- name start -->
<div> <p <p class="special-p">Name:</p> <hr class="special-hr"> </div>
<p class="used-p">some guy</p>

</div> <!-- name end -->

<div> <!-- description start -->
<div> <p <p class="special-p">Description:</p> <hr> </div>
<p class="used-p">I don't like talking about myself... I'm emo .. for some reason</p>

</div> <!-- description end -->

<div> <!-- interests start -->
<div> <p class="special-p">Interests:</p> <hr class="special-hr2"> </div>
<p class="used-p">I am interested in:</p>

<ul>

<li>something</li>
<li>Food</li>
<li>Travel</li>
<li>Fishing</li>
<li>Pokemon</li>
<li>More Pokemon</li>
<li>POKEMOOONN!!!!</li>

</ul>

</div> <!-- interests start -->


</div> <!-- activity div for JQuery -->

Это код, который @kevtrout научил меня. Тем не менее, страница не загружается внутри div

это функция bio внутри контроллера userProfile

function bio(){



        $this->load->library('DX_Auth');
        $this->load->helper('url');
        $this->load->helper('form');
        $this->load->model('userprofile_m');
        $userID = $this->dx_auth->get_user_id();

        $friend_ids = $this->userprofile_m->get_friends_ids($userID);

        $data['interest'] = $this->userprofile_m->get_user_intersts($userID);
        //$data['broadcasts'] = $this->userprofile_m->get_broadcasts($userID);
        $data['friendID'] = $friend_ids;
        //$data['friendsBroadcasts'] = $this->userprofile_m->get_friends_broadcasts($userID,$friend_ids);
        $bio_view = $this->load->view('bio',$data,true);
        return $bio_view;



    }

И это JQuery внутри view profile.php, который хочет загрузить view bio.php и отправить данные в .. Это сразу же делается после $ (document) .ready

$.post("<?php echo site_url('userProfile/bio');?>",{user_id: 777},function(){

        $("#insert-activity").html(data);

    },html);

Ответы [ 2 ]

1 голос
/ 25 марта 2011

1) Я бы, вероятно, создал контроллер / метод, который загружает био-информацию, а затем био-представление. затем загрузите этот контроллер / метод, используя ваш ajax.

ОК, вам нужно добавить метод get_bio или что-то еще в ваш контроллер UserProfile. Функция почти такая же, как ваша индексная функция, но она загружает био-представление в конце, а не представление профиля. Затем измените свой JQuery на:

 $("#insert-activity").load("<?php echo site_url('userprofile/get_bio'); ?>");

2) .. если нет какой-то причины, почему вам действительно нужно загрузить био-представление с помощью ajax, вы можете просто сделать

<div id="insert-activity">
     <? $this->load->view('bio'); ?>
</div>

потому что тогда данные будут доступны в био представлении.

0 голосов
/ 26 марта 2011

В ваших комментариях к @icchanbobot вы указали, что пытаетесь использовать контроллер для получения био-информации из БД и возврата ее в сценарий jquery, но он не работает.Я предлагаю следующее, чтобы попытаться помочь.Дайте мне знать, если вы придерживаетесь такого подхода или если он очевиден для вас и что-то еще усложняет процесс.

В моих сценариях я следую следующему плану, когда jquery получает информацию из базы данных ивставляет его в страницу.

$.post(
        "<?php echo site_url('controller_x/get_bio');?>",
        {user_id: userID},
        function(data){
            $('#insert-activity").html(data);
        },
        html
    );

Функция Controller_x get_bio () взаимодействует с вашей базой данных, чтобы извлечь данные и загрузить представление.Используя третий параметр из $this->load->view();, я возвращаю html-представление в виде строки и присваиваю его переменной, а затем возвращаю переменную для вызова jquery post () .

class Controller_x extends Controller(){

function get_bio(){
    $user_id = $this->input->post('user_id');
    $this->load->model('bio_model');
    $data['bio'] = $this->bio_model->get_bio($user_id);
    $bio_view = $this->load->view('bio',$data,true);
    return $bio_view;
}
}

функция обратного вызова в $ .post () выше берет данные, которые были возвращены, и вставляет их в именованный div.html сообщает сценарию, какой тип данных ожидать (html, json).Я полагаю, что вы можете обойтись без этого, но не уверены, что без тестирования.

Надеюсь, это проясняет, что вы либо на правильном пути, либо предоставляете недостающие детали.

Удачи1018 *

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