Ajax com jQuery – Método load()

Postado por: Pedro Rogério em

jQuery oferece bastante funcionalidades Ajax que podem facilitar a tarefa de enviar e fazer requisições asíncronas no servidor. O método mais simples de jQuery para carregar conteúdo através de Ajax é o load(). Esse post tratará de forma simples este comando para mostrar as diferentes formas de uso.

Sintaxe

load(url,parametros,callback)

Inicia uma requisição Ajax a URL solicitada com parâmetros opcionais. Você pode especificar uma opção de callback, que pode ser chamada quando a requisição está completa.

Argumentos

  • url: A URL que é solicitada a requisição.
  • parâmetros: Um objeto cuja propriedades são serializadas em uma série de parâmetros codificados corretamente e que se passam a requisição. Se utilizado, deve-se especificar se a requisição utiliza o método POST, caso contrário, se omitido, a requisição utiliza o método GET.
  • callback: Uma função chamada após a solicitação já ter sido processada.

Vamos ao 1º exemplo:

$("#conteudo").load("arquivo.html");

Carregaria o conteúdo do arquivo.html dentro da div “#conteúdo”. Um exemplo um pouco mais elaborado e completo poderia ser o seguinte:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajax com jQuery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
	$("input[type=button]").click(function(event) {
		$("#conteudo").load('arquivo.html',aviso());
	});
});
function aviso(){
	alert('O conteúdo será carregado agora!');
}
</script>
</head>
<body>
    <p><input type="button" value="Carregar conteúdo" /></p>
    <div id="conteudo"></div>
</body>
</html>

Vejam o exemplo

Como podem ver, sua utilização é muito simples, mas existem alguns macetes. Por exemplo, quando o argumento “parâmetros” é especificado a requisição se faz sob o método HTTP POST, caso contrário, a requisição se faz de modo GET. Se quiser realizar uma requisição GET com os parâmetros, você pode incluí-la na URL. Mas neste caso você deve se assegurar de que a URL está devidamente codificada.

No exemplo seguinte utilizamos o valor do atributo “value” de três botões input para passar a um arquivo .php a ação que desejamos executar. O código que efetuaria a requisição Ajax no arquivo .php seria esse:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajax com jQuery</title>
<style type="text/css">
	#box {border:1px solid #ccc; padding:5px}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
	$("input[type=button]").click(function(event) {
		var acao = $(this).attr("value");
		$("#box").load('requisicao.php',{acc:acao});
	});
});
</script>
</head>
<body>
    <p><input type="button" value="Editar" /></p>
    <p><input type="button" value="Novo" /></p>
    <p><input type="button" value="Deletar" /></p>
    <div id="box"></div>
</body>
</html>

Já o arquivo requisicao.php se encarregaria de veriifcar os parâmetros via POST e retornar as ações pertinentes:

< ?php
if($_POST['acc']=='Editar'){
	// Acoes relacionadas a edicao
	echo 'A ação selecionada é editar';
}elseif($_POST['acc']=='Novo'){
	// Acoes de criacao
	echo 'A ação solicitada é criar';
}else{
	// Acao para deletar
	echo 'A ação solicitada é deletar';
}
?>

Vejam o exemplo

Na grande maioria da vezes iremos utilizar o método load() para retornar todo o conteúdo da requisição, mas as vezes pode ocorrer de você querer filtrar essa resposta. jQuery permite a você especificar um seletor na URL para filtrar os elementos que irão ser retornados. Por exemplo:

$('#box').load('meu_arquivo.html #conteudo')

Tudo que estiver dentro da div #conteudo no arquivo meu_arquivo.html será carregado dentro da div #box. O exemplo seguinte se encarrega de carregar todos os links que estão dentro do arquivo links.html:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajax com jQuery</title>
<style type="text/css">
	#box {border:1px solid #ccc; padding:5px}
	a {display:block}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
	$("input[type=button]").click(function(event) {
		$("#box").load('links.html a');
	});
});
</script>
</head>
<body>
	<p><input type="button" value="Carregar conteúdo" /></p>
    <div id="box"></div>
</body>
</html>

E o arquivo links.html seria da seguinte forma

<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum sed diam nonumy eirmod tempor invidunt ut labor. Stet clita kasd gubergren consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua</p>
<ul>
    <li><a href="http://www.pinceladasdaweb.com.br/blog/">Pinceladas da Web</a></li>
    <li><a href="http://www.cssnolanche.com.br">CSS no Lanche</a></li>
    <li><a href="http://www.cssnolanche.com.br/uploads/html5/">Exemplo de página em HTML5</a></li>
    <li><a href="http://twitter.com/pinceladasdaweb">Siga-me no Twitter</a></li>
</ul>

Vejam o exemplo

Esse tutorial foi escrito a partir do original: Ajax con jQuery: el método load().

Posts Relacionados

Confira também outros artigos interessantes postados aqui no blog.

Sobre Pedro Rogério

Pedro Rogério é desenvolvedor web por paixão, não saberia fazer melhor outra coisa. Além de escrever para o Pinceladas da Web também escreve para o CSS no Lanche, blog voltado ao desenvolvimento front-end.

27 Responses to “Ajax com jQuery – Método load()”

  1. jQuey fede…. tem um post relacionado sobre jQuey vc. Prototype, primeiro que esse tipo de coisa nem se compara, é como comparar uma criança de 2 anos com um adulto de 26, mas digo isso por causa que há algumas desatualizações nos slides.

    E outra tudo é uma questão de proposta e approach, com approach eu quero dizer Design Pattern, se você não utiliza, você não tem escalabilidade.

    Pronto jQuery fede

    • “por causa que” é que fede…. hahahahaha… cursinho de português pra ti, amigo.

    • Esse Hedson não sabe de nada.
      Quem disse que idade tem peso nessa “briga infantil”?
      E, se tivesse, pior seria para o prototype, que, por ser mais velho, não conta com as mais novas descobertas, artifícios crossbrowser para os novos navegadores, que desenvolvedores aprenderam recentemente.

      Nesse site (http://mootools.net/slickspeed/) são feitos testes de performance de DOM. e o Protorype perde com 342 contra 115 do jQuery (quanto menor, melhor) [Ressaltando que, nesse teste, Dojo foi melhor, e a versão do jquery utilizada foi a 1.2.6, hoje com o 1.3.2 e jajá com a 1.4, níveis de performance aumentaram(rão) bastante].

      Esta página (http://www.kylehayes.info/2009/03/29/survey-results-javascript-frameworks/) mostra a ascensão do jQuery, frente a outros frameworks em vários requisitos.

      O que fede é você, ao dizer o que não sabe. Se achou o código do cara sujo, talvez tenha sido porque você não tenha gostado da forma que ele redige código, ou porque ele assim o fez apenas a nível didático.

      Trabalho dando manutenção em, sistemas antigos que utilizam seu prototype e, sinceramente, se jQuery fede, deve ser porque ele apertou a mão do prototype… (e o que escalabilidade tem com isso?)

  2. paulim

    Fala merda não fio

  3. É possivel utilizar isso mais uma coisa que me veio a cabeça ??
    Seria assim,
    Quando um arquivo for chamado ele fazer com que uma div apareça, no caso uma div de loading, isso enquanto o arquivo ainda estiver sendo carregado, e quando o arquivo terminar de ser carregado a div sumir ??

    tentei onComplete e tal mas não consegui arrumar uma solução para esse meu problema

    • Tem sim, tente:

      $(document).ready(function() {
      $(‘#div-loading’).show();
      $(“input[type=button]“).click(function(event) {
      $(“#box”).load(‘links.html a’, function(){
      $(‘#div-loading’).hide();
      });
      });
      });

  4. Fox

    Edson,

    Tu vem querer falar difícil mas nem o português você acerta? Estou pouco ligando para quem é mais velho, cada um usa o que quer e pela boa política de grupo, respeita as escolhas dos outros. Primeiro, vá e aprenda um pouco de português.

    Minha opnião pessoal, se uma pessoa não sabe falar, como pode ela programar?

  5. Murilo

    Pedro,

    Você não tem noção o quanto o seu post me ajudou.
    Abraço,

  6. Filipe Rezende

    bom dia,
    Primeiramente gostaria de parabenizar pelo post, são iniciativas assim que amadurecem tecnologias e programadores, mas vamos ao que interessa, a dúvida:
    Estou iniciando em jquery e travei num problema: como executar o load para um link externo? Pelo que percebi, ele funciona excepcionalmente bem, mas somente, para arquivos do mesmo projeto.

    • Filipe Rezende

      Achei a resposta: Criar um script em PHP, ou ASP, ou alguma outra executada no servidor, para realizar a leitura do url externo desejado.
      PHP:
      extract($_POST);
      $page= get_url_contents($site2Read);
      echo $page;
      function get_url_contents($url){
      $crl = curl_init();
      $timeout = 5;
      curl_setopt ($crl, CURLOPT_URL,$url);
      curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
      $ret = curl_exec($crl);
      curl_close($crl);
      return $ret;
      }
      HTML (script):
      $(“#allh2″).load(“/loader.php h2″, {want2Read:”http://www.want2Read.com/”});

      obs.:
      Renomear /loader.php pelo nome do seu arquivo PHP
      Renomear http://www.want2Read.com/ pela url que deseja ler.
      Adicione uma ‘div’ com id=”allh2″ na sua página:

      Espero ter ajudado.

      extraído de: http://www.sitegrind.nl/jquery/jquery-load-function-get-content-from-other-websites/

  7. Carlos Bezerra

    Muito bom o post
    ajudou muito abraços

  8. Areshandore

    Quem fala mal de JQuery é recalcado que nunca teve vontade de testar.

  9. Olá Pedro, parabéns pelo seu Site, muito bom mesmo, e em relação aos códigos têm como inserir eles no blog, montei um blog para Imobiliária da uma passadinha lá e gostaria de pôr um Loading… inicial, se puder tirar minha dúvida agradeço.

  10. Eduardo Faria

    obrigado pelo post!

  11. Parabéns pelo tutorial Pedro.

    Em nossa intranet utilizamos um sistema desenvolvido com base em métodos do excelente jQuery, que apresenta boa performance ao ser parseado pelo browser. Só temos boas recomendações para este framework.


    Fabio B.
    Unihost Brasil

  12. Brother, sei q aqui não é lugar de duvidas e tal..rs, e é muito bom esse tutorial, mas não funciona no IE, o método load() não funciona da uma olhada nisso http://yema.com.br/html/receitas.html – no FF funciona perfeito, mas no IE não..

    • Provavelmente deve ser por que você tem 2 onloads na página, o primeiro quando inicializa o Ajax e o segundo para o carrossel de imagens. Experimento colocar tudo dentro de um só.

    • Renato Medina

      Também estou com o mesmo problema. Em todas as versões da bosta do IE o load() falha.

      O erro abaixo ocorre:

      Detalhes dos erros da página da Web

      Agente de Usuário: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
      Carimbo de data/hora: Thu, 18 Feb 2010 01:02:38 UTC

      Mensagem: Erro de sistema: -1072896748.

      Linha: 19
      Caractere: 23867
      Código: 0
      URI: jquery.js

      Alguem tem alguma solucao para isso???

      • Renato Medina

        Encontrei a solução.

        Basta na funcao de callback adicionar os argumentos como no exemplo abaixo:

        $(‘#div’).load(url, {}, function(responseText, textStatus, XMLHttpRequest) {
        alert(‘funcionou!’);
        });

        ;-)

  13. Alex

    Socorro. Estou preparando um site onde as páginas são carregadas pelo jquey, dentro de uma destas páginas existe uma galeria com lightbox. Gostaria de saber porque o lightbox não funciona quando chamado por páginas já carregadas pelo jquery. Obs: Se eu abri a página que contém o lightbox em separado ela funciona perfeitamente então o problema não é do lightbox. Sou leigo em javascript.

  14. Olá Pedro então é possivel colocar um pre-loading em um site HTML, desenvolvi este site http://www.jcimoveisbrasil.com e gostaria de saber se têm como eu colocar este pré-loading para abrir a pagina só quando estiver totalmente carregada por causa dos slydes das fotos que uso em imóveis agradeço a sua atenção cara, abraço…

  15. fps73

    Gostaria de saber a vantagem/desvantagem em utilizar o xml com Ajax, em relação ao seu exemplo, utilizando load.
    No meu caso, preencherei uma tabela com dados oriundos do meu postgre, utilizando PHP, e me passaram uma rotina com XML, que comparando com a sua, é muito mais trabalhosa.

  16. Grandhalf

    Ai galera eu sou novato em ajax e precisava de uma ajuda….
    kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
    Eu to fazendo um site em html, mas eu tenho um link em flash e gostaria de chamar as outras pags em ajax, como eu faço pra isso….?

  17. mto bom, me surgiu uma duvida, vou explicar o que eu to fazendo e depois falo o que preciso :

    explicando: 1- div menu de produtos (cat : acessorios = sub_cat cintos, bolsas …// vestuario = camisa, vestido, meia …. etc.)

    2- div mostra_produto, que contem o titulo do produto, a imagen e o preço..

    agora a duvida .. queria saber uma função pra qndo clicar no item do menu, respectivamente um link normal ( não input ) tipo, ao clicar na subcategoria CINTOS, mostra produtos = cintos …

    não sei como explicar mais que isso .. rs.. mas acho que vcs entenderão …

    Abraços .. to no aguardo e sempre vindo aqui ,, ;)

Leave a Reply