How can I make a button load more using jquery?

0

Good morning, I'm doing a site that has the posts, however I do not want to use the paging system, I want to make a button that loads more post, hence I wanted to know how I do ..

<header id="top">
    <a href="#"><p id="nome">projeto</p></a>
</header>

<div id="principal">
    <div class="linha">
        <div class="post"></div>
        <div class="post"></div>
        <div class="post"></div>
    </div>
    <div class="linha">
        <div class="post"></div>
        <div class="post"></div>
        <div class="post"></div>
    </div>
    <div class="linha">
        <div class="post"></div>
        <div class="post"></div>
        <div class="post"></div>
    </div>
</div>

<div id="butao">
    <p id="load">MAIS</p>
</div>

This is the code I have done so far, can anyone help me? Make sure that when the "MORE" button is clicked, it loads a new line with 3 more posts.

Thanks in advance ..

    
asked by anonymous 16.10.2016 / 15:42

2 answers

1

@ TássioGonçalves, you can do with the following steps:

  • Assigns the event handler click to the "Load more" button.
  • Count the number of items on the page.
  • Request data to a PHP page fetching from DB
  • Receives this data and inserts it into the page.
  • index.html

    <ul class="itens">
       <li class="item">A</li>
       <li class="item">B</li>
       <li class="item">C</li>
    </ul>
    <button class="mais">Carregar mais</button>
    

    STEP 1 AND 2

    jquery-script.js

    // Atribui um event handler ao botao  - evento click
    $(".mais").on('click', function () {
            var nItens = $itens.find(".item").length; // Conta o numero de itens
            var dadosEnviar = { offset : nItens };    // Dados que serao enviados ao BD. Será o número de ítens na página.
           pedidoAjax(dadosEnviar); 
    });
    

    AJAX request that waits for the server response in JSON format. In this case, a vector of strings in the JSON format.

    var pedidoAjax = function(dadosEnviar) {
        $.ajax({
            data: dadosEnviar,        // dados a serem enviados
            dataType: "json",         // Formato do dado **recebido como resposta do servidor**.  html, json, text ...
            method: "post",           // post ou get
            url: "myPHPscript.php",   // url invocada
            success: function (dados, textStatus, jqXHR) {
    
                // Executado em caso de sucesso.
                console.log(dados + " " + textStatus + " " + jqXHR + " ");
    
                inserirItens(dados);
            },
            error: function (jqXHR, textStatus, errorThrown) {
    
                // Executado em caso de erro.
                alert(jqXHR + " " + textStatus + " " + errorThrown);
                error();
            }
        });
    }
    

    You can view more in this post .

    STEP 3

    /**
     * Funcao que insere os dados na lista
     * @param {string[]} dados. Vetor de strings. FORMATO: ["nome 1", "nome 2", "nome 3"]
     */
    var inserirItens = function(dados) {
        function addItem(indice, dado) {
            // Cria item da lista
            var $li = $("<li></li>");
    
            // Configura-o
            $li.addClass("item");
            //...
            $li.html(dado);
    
            // Insere o elemento no DOM
            $li.appendTo($itens);
        }
    
        $.each(dados, addItem); // Para cada elemento no vetor 'dados', invoca a funcao 'addItem'
    }
    

    PHP code can be something like this

    myPHPscript.PHP

    //Altera o cabeçalho para que o PHP saiba que o retorno será uma string JSON
    header('Content-Type: application/json; charset=utf-8');
    
    // Recebe os dados (Número de ítens existentes na página do cliente)
    $contentType = $_SERVER["CONTENT_TYPE"];
    $response_array['contentType'] = $contentType;
    
    $aDados = json_decode(file_get_contents("php://input"), true); // Recebe dados como array associativo. 
    
    // Busca no BD
    // Se o BD for MySQL ou PostgreSQL, use LIMIT e OFFSET para fazer a busca, ex:
    // "SELECT nome FROM tabel LIMIT 3 OFFSET ".$aDados["nItens"].";";
    
    
    // Cria array com os dados do BD
    $dados = array();
    while ($r...)               // $r guarda o resultado do BD
    {
       $dados[] = $r["nome"];
    }
    // agora $dados é um array que contém todos os nomes buscados no BD.
    
    // Converte o array para JSON e "retorna"
    echo json_encode($response_array);
    

    STEP 4

    /**
     * Funcao que insere os dados na lista
     * @param {string[]} dados. Vetor de strings. FORMATO: ["nome 1", "nome 2", "nome 3"]
     */
    var inserirItens = function(dados) {
        function addItem(indice, dado) {
            // Cria item da lista
            var $li = $("<li></li>");
    
            // Configura-o
            $li.addClass("item");
            //...
            $li.html(dado);
    
            // Insere o elemento no DOM
            $li.appendTo($itens);
        }
    
        $.each(dados, addItem); // Para cada elemento no vetor 'dados', invoca a funcao 'addItem'
    }
    
        
    24.05.2018 / 10:48
    0

    Gabriel what you want to implement is something infinitscroll, you have many examples, I made one for you.

    link

        
    16.10.2016 / 19:19