Отправка формы через AJAX с использованием CodeIgniter - PullRequest
0 голосов
/ 30 июля 2010

Я создаю веб-приложение, которое позволит пользователям следить за темами обсуждений в формате вопросов и ответов. Для этого при отображении вопросов у меня есть кнопка «Подписаться» рядом с каждым вопросом. Я хочу, чтобы пользователи могли отслеживать эти темы без перезагрузки страницы, используя AJAX. Итак, я хочу, чтобы вызов AJAX:

1) Отправьте форму обновления базы данных записи следующих отношений; а также 2) Заменить кнопку «Подписаться» на «Подписка»

Вот мой код JavaScript:

$("#submitFollow").click(function() {
    var type = $("input#type").val();
    var u_id = $("input#u_id").val();
    var e_id = $("input#e_id").val();
    var dataString = 'type='+ type + '&u_id=' + u_id + '&e_id=' + e_id;

    $.ajax({
        type: "POST",
        url: "<?=site_url()?>/follow/ajaxFollow",
        data: dataString,
        success: function() {
            $('#following').html("Following");
            .hide()
            .fadeIn(1500)
        }
    });
    return false;
});
});

Вот как выглядит мой код формы. Я исключил действие и метод, чтобы форма не отправлялась регулярно. Я пытался предотвратить дефолт с помощью JS, но это не сработало. (Значения заполняются моделью):

<div id="following">
<form id="followForm" action="" method="">
<input type="hidden" name="type" id="type" value="question">
<input type="hidden" name="u_id" id="u_id" value="1">
<input type="hidden" value="12" name="e_id" id="e_id">
<input type="submit" id="submitFollow" value="Follow Question" class="submitFollow">
</form>
</div>

Прямо сейчас контроллер довольно прост - он просто берет массив переменных post и передает их прямо в базу данных.

Я не слишком хорош в JavaScript, поэтому приношу свои извинения, если я уделяю ваше время простой проблеме.

1 Ответ

2 голосов
/ 30 июля 2010

Я просто буду здесь общим, но, надеюсь, это поможет. Если бы это был я, я бы сделал что-то вроде следующего:

Вот немного HTML, сгенерированное из codeigniter:

<div>
questions 1
</div>
<div>
<a class="follow" href="http://example.com/follow/question/1">Follow Question 1</a>
</div>

<div>
questions 2
</div>
<div>
<a class="follow" href="http://example.com/follow/question/2">Follow Question 2</a>
</div>

Затем заставьте все работать без JavaScript (вы добавите это позже). Итак, вот контроллер codeigniter с некоторым общим кодом:

 <?php

class Follow extends Controller {

    function Follow()
    {
        parent::Controller();
        $this->auth->restrict_to_admin();
    }

    function question($id = NULL)
    {
        if($id)
        {
            //get question from database using the id
            //i assume somehow the user is logged in? use their id where applicable
            echo '<span>You are now following this question</span>';
        }
    }

}

/* End of file follow.php */

Теперь, используют ли они javascript или нет, это будет работать. Вот где вы добавляете javascript (я предполагаю, что вы используете jquery?). Если нет, то это будет достаточно близко.

$(document).ready(function(){
    $('follow').click(function(event){
        event.preventDefault();

        var followUrl = $(this).attr('href');
        //do ajax call here.
        $.post(
        followUrl,
        {
            //any paramaters you need to add can
            //go here in this format:
            //param_key: param_value
        },
        function(responseText){
            //here you can update the clicked link to say something
            //like "you are now following this question"
            //the responseText var will have whatever text the server responds with.
            //just responsd with html
        },
        'html'
        );

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