Creación de una selección de página de comentarios usando datos AJAX

I decided to go AJAX route for the heck of it, mainly to learn it, and to see how it worked. I want to add a page selection for comments that exceed, say, 10 posts.

I am using Codeigniter, and will post what I have so far:

Controlador:

    public function updatefilters()
    {
        $this->blurb_model->create_session_filter($_POST['filters']);
        $this->blurb_model->get_threads($_POST['pagenum']);
    }

Modelo:

    public function get_threads($page = 0)
    {
            $NEEDPAGEHERE = $page
            [fetch threads]
            [return threads / count / etc]
    }

So my goal is to display the number of pages to the user. This part is done. I have a submit button displayed for each page based on the total count of items returned in the "get_threads" model (code is omitted for relevance sake).

Here is my AJAX/javascript

Focus lies on the updatefilter function. I use the returned thread list to construct HTML and post it within the div. This works fine.

The problem is that I want to reuse the updatefilters() function when the user clicks on a page button...but its not working. I want to pass the value of the submit button into the updatefilter(pagenum) so that it then goes to the controller -> method, and I can do the math, but it does not work.

JavaScript:

 function updatefilters(pagenum){
        // get the selected filters
        var html;
        var i = 0;
        if (!pagenum)
            {
                pagenum = 0
            }
        var $selected = $('#selectable').children('.ui-selected');
        // create a string that has each filter separated by a pipe ("|")
        var filters = $selected.map(function(){return this.id;}).get().join("\|");
        $.ajax({
            type: "POST",
            async: false,
            url: 'welcome/updatefilters',
            dataType: 'json', 
            data: { filters: filters, pagenum: pagenum },
            success: function(data){
                var html = "";
                html += "<div id=board>"
                html += "<div class='board' id='table'>"
                html += "<div id='row'>header here</div>"

                var pages = Math.ceil(data['num_threads']/10);
                var htmlpage = "<div class='pages'>"
                for (i=1 ; i < pages+1 ; i++)
                    {
                        htmlpage += "<li><input type='submit' id='page"+i+"' value='"+i+"' onclick='updatefilters(this.value);' /></li>"
                    }
                htmlpage += "<div>"    
                htmlpage += "</ul>";
                htmlpage += "</br></br></br>";
                html += htmlpage;

                for (i=0 ; i < data['threads'].length ; i++)
                {
                    html += "<div id=row>";
                    html += "   <div id='author' style='background: url("+data['threads'][i].location + ") no-repeat; background-position: center;'><p>"+data['threads'][i].username + "</p></div>";
                    html += "   <div id='arrow'></div>";
                    html += "   <div id='subject' title='"+ data['threads'][i].body +"'>";
                    html += "       <a href=thread/" + data['threads'][i].slug + ">"+ data['threads'][i].subject +"</a><p>Created: "+data['threads'][i].posttime+"</p></div>";                    
                    html += "   <div id='info'>";
                    html += "       <div id='replies'>" + data['threads'][i].replies_num + "</div>";
                    html += "       <div id='lastpost'>"+ data['threads'][i].lastreply+"</div>";
                    html += "   </div>";
                    html += "</div>";
                }
                html += "</div></div>";
                $('#board').html(html);
            }
        });
    } 


$(function() {
    $( "#selectable" ).selectable({
        selected: updatefilters  
    });
    getactivesession();
    function getactivesession(ev, ui){
        var i = 0;
        var actfilter, strfilter;
        var strfilterarray = new Array();
        $.ajaxSetup({cache: false})
        $.ajax({
        type: "POST",  
        async: false,
        url: 'welcome/getactivesession', 
        dataType: 'json',
        success: function (data){
            strfilter = JSON.stringify(data)
            strfilterarray = strfilter.split(',')
            for (i=0 ; i < strfilterarray.length ; i++) {
                strfilter = strfilterarray[i]
                strfilter = strfilter.replace(/[\[\]'"]+/g,'');
                var strfilterdash = strfilter.replace(/\s+/g, '-')
                actfilter = '#'+ strfilterdash
                $(actfilter).addClass('ui-selected')
            }
            updatefilters();
        }
        });
    }
});

This would be an INCREDIBLE learning experience for myself, and a huge help if someone can spot the problem and explain it in an easily understood manner. I am extremely new with javascript and programming in general (which might explain the ugliness of the code).

¡Gracias!

preguntado el 12 de junio de 12 a las 17:06

For starters, I give you merit for the indentation ;) -

This isn't helpful (sorry), but nowadays the cool kids do infinite scroll :) -

What your javascript console says? -

@Alexander it doesn't load past activefilters, and displays no errors. When i click on the #selectable button, it gives me this error Could not convert JavaScript argument [Break On This Error] ...&b.timeout>0&&setTimeout(function(){w&&!H&&M("timeout")},b.timeout);try{w.send(k... -

Let's see how to sort this out. -

1 Respuestas

Modifica tu selected devolución de llamada de evento.

$("#selectable").selectable({
  // Here is the event callback signature for reference
  selected: function(event, ui) {
    updatefilters();
  }
});

You were passing an unexpected first parameter to updatefilters función.

Respondido el 12 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.