jQuery: Executando solicitações síncronas de AJAX

Eu fiz alguns jQuery no passado, mas estou completamente preso a isso. Eu sei sobre os prós e contras do uso de chamadas ajax síncronas, mas aqui será necessário.

A página remota é carregada (controlada com o firebug), mas nenhum retorno é mostrado.

O que devo fazer diferente para fazer com que minha function retorne corretamente?

function getRemote() { var remote; $.ajax({ type: "GET", url: remote_url, async: false, success : function(data) { remote = data; } }); return remote; } 

Como você está fazendo um pedido síncrono, isso deve ser

 function getRemote() { return $.ajax({ type: "GET", url: remote_url, async: false }).responseText; } 

Exemplo – http://api.jquery.com/jQuery.ajax/#example-3

OBSERVAÇÃO: A configuração da propriedade async como false está obsoleta e em processo de remoção ( link ). Muitos navegadores, incluindo Firefox e Chrome, já começaram a imprimir um aviso no console, se você usar isso:

Cromada:

O XMLHttpRequest síncrono no thread principal é obsoleto devido a seus efeitos prejudiciais à experiência do usuário final. Para mais ajuda, verifique https://xhr.spec.whatwg.org/ .

Raposa de fogo:

O XMLHttpRequest síncrono no thread principal é obsoleto devido a seus efeitos prejudiciais à experiência do usuário final. Para mais ajuda http://xhr.spec.whatwg.org/

Eu realmente odeio o “Eu não uso ou concordo com ele, então você não deve usá-lo também” atitude que Tom tem acima. Quase tão ruim quanto considerado ensaios nocivos . O que me faz lembrar de pessoas discutindo entre aspas simples e duplas com base em sua preferência IDE quando ambas realmente se encheckboxm nos padrões.

Eu tive um problema de ajax que só foi resolvido adicionando async: false, a ele. Usando o navegador hangups como uma desculpa para argumentar a depreciação (e remoção) deste recurso é bobo. Como você sabe quanto tempo a solicitação de ajax síncrona de alguém levaria? Nem todo mundo carrega ou transfere grandes quantidades de dados com essas chamadas.

Meu problema era um sistema de rastreamento que a maioria dos navegadores não informava a hora em que os usuários deixavam a página ( onbeforeunload ), mas uma vez que o pedido do ajax era feito para ser síncrono, funcionava para tudo, exceto o Safari no iOS e outro final de vida extremamente desatualizado navegadores. A quantidade de dados que eu estava enviando era extremamente insignificante, apenas dois inteiros, e era uma solicitação para o servidor local. A suspensão do meu pedido não é notável , você precisaria de ferramentas de monitoramento para observar. Minha alternativa para chamadas ajax síncronas seria ajax contínuo através de uma function setInterval , que aumenta massivamente a carga do servidor e a largura de banda. Você não pode argumentar que uma chamada ajax a cada N segundos é melhor que uma quando alguém sai da página. Você não pode.

A desaprovação de solicitações síncronas é uma punição definida em todos os desenvolvedores da web, porque alguns deles estavam usando isso irresponsavelmente.

Você está usando a function ajax incorretamente. Como é síncrono, ele retornará os dados da seguinte forma:

 var remote = $.ajax({ type: "GET", url: remote_url, async: false }).responseText; 

quão remoto é esse URL? é do mesmo domínio? o código parece bem

tente isso

 $.ajaxSetup({async:false}); $.get(remote_url, function(data) { remote = data; }); // or remote = $.get(remote_url).responseText; 
 function getRemote() { return $.ajax({ type: "GET", url: remote_url, async: false, success: function (result) { /* if result is a JSon object */ if (result.valid) return true; else return false; } }); }