Resolvendo erro ‘411 Length Required’ em requisições Ajax com jQuery

Olá pessoal, quanto tempo, né?! Pois é, abandonei meu blog, mas vou voltar!

Hoje passei por um ‘problema’ novo na empresa onde trabalho. Numa página que faz uma requisição Ajax com jQuery, no Firefox 3.1, a requisição estava retornando erro ‘411 Length Required’. Esse erro é retornado pelo browser quando em uma requisição HTTP não é retornado o tamanho do resultado, o que em alguns casos, pode fazer com que o browser não consiga calcular o tempo de download da página, por exemplo. Ao que me pareceu, o Firefox 3.5 sabe tratar isso, porém, o 3.1 não. Não testei no Chrome, IE, Opera, etc, mas creio que pelo menos o IE não sabe tratar isso também.

Normalmente, esse erro é obtido em requisições Ajax. Nesse post não vou entrar em detalhes sobre como especificar o tamanho de uma requisição no cabeçalho de uma página com Ajax puro, vou pular diretamente para jQuery, que foi onde tive esse ‘problema’ hoje.

Uma requisição Ajax simples em jQuery (depois vou criar um post sobre como criar requisições Ajax com jQuery), funciona assim:

$.ajax({
    type : 'POST',
    url : './pagina.php',
    success : function(data){
        alert(data);
    }
});

Essa requisição simplesmente ‘chama’ o conteúdo da página ‘pagina.php’ e executa um ‘alert’ no retorno. O Firefox 3.5, como coloquei acima, executa esse script normalmente, pegando o retorno ‘data’ e colocando no ‘alert’, porém, no Firefox 3.1, o script não é executado e o erro ‘411 Length Required’ é retornado.

Esse erro é retornado, pelo fato de nenhum parâmetro estar sendo enviado para a página ‘pagina.php’, para resolvermos esse problema no jQuery, basta colocarmos a linha:


data : {}

Ficando assim:

$.ajax({
    type : 'POST',
    url : './pagina.php',
    data : {},
    success : function(data){
        alert(data);
    }
});

Com apenas isso, o Firefox 3.1 e outros browsers que não interpretam o tamanho da requisição quando não é enviado nenhum parâmetro para a página de destino, continuam executando o script normalmente.

Espero que tenha ajudado.
Um abraço e uma ótima semana! =]