Мой код Ajax / jquery не работает с codeigniter - PullRequest
0 голосов
/ 14 января 2010

Следующие коды работают без jquery.

Я вставляю данные, но они не обновляются с помощью ajax. Я должен обновить, чтобы показать обновление.

Может кто-нибудь взглянуть на это и указать, что я делаю не так, пожалуйста?

Заранее спасибо.

Jquery это.

$(document).ready(function(){
//global vars
var inputUser = $("#nick");
var inputMessage = $("#message");
var loading = $("#loading");
var messageList = $(".content > ul");

//functions
function updateShoutbox(){
    //just for the fade effect
    messageList.hide();
    loading.fadeIn();
    //send the post to shoutbox.php
    $.ajax({
        type: "POST", 
        url: "index.php/admin/messages/getShoutBox", 
        // data: "action=update",
        complete: function(data){
            loading.fadeOut();
            messageList.html(data.responseText);
            messageList.fadeIn(2000);
        }
    });
}
//check if all fields are filled
function checkForm(){
    if(inputUser.attr("value") && inputMessage.attr("value"))
        return true;
    else
        return false;
}

//Load for the first time the shoutbox data
updateShoutbox();

//on submit event
$("#form").submit(function(){
    if(checkForm()){
        var nick = inputUser.attr("value");
        var message = inputMessage.attr("value");
        //we deactivate submit button while sending
        $("#send").attr({ disabled:true, value:"Sending..." });
        $("#send").blur();
        //send the post to shoutbox.php
        $.ajax({
            type: "POST", 
            url: "index.php/admin/messages/insertShoutBox", 
            data: $('#form').serialize(),
            complete: function(data){
                messageList.html(data.responseText);
                updateShoutbox();
                //reactivate the send button
                $("#send").attr({ disabled:false, value:"Shout it!" });
            }
         });
    }
    else alert("Please fill all fields!");
    //we prevent the refresh of the page after submitting the form
    return false;
});
});

У меня есть следующий контроллер. Контроллеры / админ / messages.php

function getShoutBox(){
  $data['title'] = "getshoutbox";
    $data['main'] = 'admin_home';
      $data['messages']=$this->MMessages->getMessages();
    $this->load->vars($data);
    $this->load->view('dashboard'); 

}

function insertShoutBox(){
    $data['title'] = "insertshoutbox";
    $data['main'] = 'admin_home';
    $this->MMessages->updateMessage();
    $data['messages']=$this->MMessages->getMessages();
    $this->load->vars($data);
    $this->load->view('dashboard'); 

}

Вид вот этот.

<form method="post" id="form" action="index.php/admin/messages/insertShoutBox" >
        <label>User</label>
        <input class="text user" name="user" id="nick" type="text" MAXLENGTH="25" />
        <label>Message</label>
        <input class="text" id="message" name="message" type="text" MAXLENGTH="255" />
        <input id="send" type="submit" value="Shout it!" />

    </form>
    <div id="container">
        <ul class="menu">
            <li>Shoutbox</li>
        </ul>
        <span class="clear"></span>
        <div class="content">
            <h1>Latest Messages</h1>
            <div id="loading"><img src="images/general/loading.gif" alt="Loading..." /></div>

            <?php
            foreach ($messages as $key => $list){

            print_r ($list);
            }
            ?>

        </div>
    </div>

Ответы [ 3 ]

0 голосов
/ 15 января 2010

Вы должны использовать следующий код:

$this->load->view('dashboard', '', TRUE);

Это будет возвращать данные, а не пытаться напрямую выводить их в ваш браузер.

0 голосов
/ 22 февраля 2010

У меня была очень похожая, если не идентичная проблема на моем собственном сайте. Я пытался извлечь содержимое div из страниц (представлений), сгенерированных codeigniter, но AJAX просто отказывал, и firebug не давал мне никаких подсказок, кроме того, что ничего не возвращалось, даже ошибка 404 .

Ответ iainco спас меня, но для того, чтобы он заработал, вы должны установить переменные, возвращаемые codeigniter, и вывести их вручную.

Вот основные принципы работы ajax в обеих платформах.

JQuery:

//setting up a global variable to make the code easier to recycle
AX = {
toLoad:'',
contentWrapper:'#content',
contentDiv:'#ajax-target'
};

//this is called on a click event I added to a DOM element that contains a link
function ajaxInit(){
    AX.toLoad = $(this).find('a').attr('href') + ' ' + AX.contentDiv;
    $(AX.contentWrapper).load(AX.toLoad,"");
}

и затем соответствующий контроллер codeigniter или представление, предполагая, что $ content содержит имя представления, которое вы пытаетесь загрузить:

<div id='content'>
<div id='ajax-target'>
<?php
    //setting the third variable to true tells ci to return a data string that can be read using AJAX methods
    $content_var = $this->load->view("$content",'',TRUE);
    echo $content;
?>
</div>
</div>

ПРИМЕЧАНИЕ: у меня это работало на сайте без дополнительного шага ci, но теперь я уверен, что это из-за какой-то (полезной) ошибки, потому что я не мог воспроизвести ее в моем следующем проекте.

0 голосов
/ 14 января 2010

Несколько вещей кажутся мне подозрительными.

Вы уверены, что этот URL правильный?

url: "index.php/admin/messages/getShoutBox",

Кроме того, эта строка выглядит несколько подозрительно:

if(inputUser.attr("value") && inputMessage.attr("value"))  

Вы проверили, что произойдет, если оба значения равны нулю? (Вы могли бы также использовать функцию .val() вместо .attr("value"))

Даже если это сработает, простого return вместо вашего if/else хватило бы:

return (inputUser.attr("value") && inputMessage.attr("value"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...