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! =]

2 thoughts on “Resolvendo erro ‘411 Length Required’ em requisições Ajax com jQuery”

  1. Qual o servidor no backend?
    Eu vou chutar IIS.

    O problema é que você está fazendo uma requisição POST onde você queria um GET. Alguns webservers não lidam bem com requisições POST sem POST VARS.

    Logo, existem pelo menos três formas de se contornar esse problema:

    1 – Fazer uma requisição GET;
    2 – Explicitamente definir os cabeçalhos HTTP de resposta no seu backend;
    3 – Enviar alguma variável “dummy”, como você fez no post acima.

  2. olá, ajudou-me bastante. resolvi adotando sua ideia, mas mudei no caso minha função que executa essa chamada, atribuindo ‘vazio’ na chamada. assim:

    chamada:
    getResultadoSincrono(, ”);

    função:
    function getResultadoSincrono(pUrl, pData){

    return $.ajax({
    type: “POST”,
    url: pUrl,
    data: pData,
    async: false
    }).responseText;

    }

Leave a Reply