Fala galera, como faço para abortar uma requisição que fiz com dwr antes que ela se complete?
Vlw.
Fala galera, como faço para abortar uma requisição que fiz com dwr antes que ela se complete?
Vlw.
Alguém, por favor. :shock:
Fala galera, como faço para abortar uma requisição que fiz com dwr antes que ela se complete?Vlw.
Qual seria a necessidade para isso?
Um autocomplete. A primeira requisição está colocando os resultados em cima da segunda, pois a primeira traz uma quantidade de dados maior e dá tempo da segunda terminar primeiro.
Posta o código aí, talvez assim alguém consiga ajudar
Olá…
Bem, apenas uma dica:
E se você limitasse a quantidade de resultados que devem ser mostrados? Por exemplo, 10 resultados por vez.
Assim você reduz a quantidade e o tempo da requisição.
[]'s
JL
Olá…
Bem, apenas uma dica:
E se você limitasse a quantidade de resultados que devem ser mostrados? Por exemplo, 10 resultados por vez.Assim você reduz a quantidade e o tempo da requisição.
Você diz fazer uma paginação em um campo de autocomplete?
Segue o código:
function autocompletar(e, campo) {
//Pega o valor keycode da tecla digitada
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 9 || whichCode == 0)//Tab
return false;
//Se clicar em seta pra baixo
if (whichCode == 40) {
//O primeiro item da caixa de sugesto selecioado
jQuery("#autoOpcao").find("option").filter(":first").attr("selected", "selected");
//A caixa de sugesto ganha foco
jQuery("#autoOpcao").focus();
return true;
}
//Limpa o select
jQuery("#autoOpcao").empty();
//Se estiver vazio fecha esconde a caixa de sugesto
if (jQuery.trim(jQuery("#" + campo).val()) == "") {
jQuery("#autosugestao").css("display", "none");
return;
}
//Marca o campo que est sendo usado a auto sugesto
jQuery("#hiddenSugestao").val(campo);
if (jQuery.trim(jQuery("#" + campo).val()).length > 2)
buscaLike(campo);
}
function buscaLike(campo){
//Compara os campos
switch (campo) {
case "partnumber":
jQuery("#assistenteAutoSugestao").hide();
//Busca o partnumber
ControleMercadoria.autocompletarPartNumber(jQuery.trim(jQuery("#partnumber").val()), function(listaPartNumbers){
//Inicia a lista
var htmlLista = "";
//Lista os partnumbers
for (var i = 0; i < listaPartNumbers.length; i++)
htmlLista = htmlLista + "<option value='" + listaPartNumbers[i].sequencia + "'>" + listaPartNumbers[i].partNumber + "</option>";
//Se lista for vazia esconde a caixa de auto sugesto
if (htmlLista == ""){
jQuery("#autosugestao").css("display", "none");
return;
}
//Insere a lista no select
jQuery("#autoOpcao").html(htmlLista);
});
break;
case "exportadorBarra":
case "fabricanteBarra":
case "exportador":
case "fabricante":
jQuery("#assistenteAutoSugestao").empty();
jQuery("#complAutoSugestao").empty();
jQuery("#assistenteAutoSugestao").show();
//Busca o exportador/fabricante
ControleMercadoria.autocompletarEmpresa(jQuery.trim(jQuery("#" + campo).val()), function(listaEmpresas){
//Inicia a lista
var htmlLista = "";
var htmlListaCompl = "";
//Lista os exportadores/fabricantes
for (var i = 0; i < listaEmpresas.length; i++) {
htmlLista = htmlLista + "<option value='" + listaEmpresas[i].codigo + "'>" + listaEmpresas[i].nome + " (" +
listaEmpresas[i].pais.descricao + ")</option>";
var logradouro = "";
var numero = "";
var complemento = "";
var cidade = "";
var estado = "";
if (listaEmpresas[i].logradouro != null)
logradouro = listaEmpresas[i].logradouro;
if (listaEmpresas[i].numero != null)
numero = " - " + listaEmpresas[i].numero;
if (listaEmpresas[i].complemento != null)
complemento = " - " + listaEmpresas[i].complemento;
if (listaEmpresas[i].cidade != null)
cidade = " - " + listaEmpresas[i].cidade;
if (listaEmpresas[i].estado != null)
estado = " - " + listaEmpresas[i].estado;
htmlListaCompl += "<span id='compl_" + listaEmpresas[i].codigo + "'><strong>" + listaEmpresas[i].nome + "</strong><br />" +
logradouro + "" + numero + "" + complemento + "" + cidade + "" + estado + " - " +
listaEmpresas[i].pais.descricao + "</span>";
}
//Se lista for vazia fecha a div
if (htmlLista == ""){
jQuery("#autosugestao").css("display", "none");
return;
}
//Insere a lista no select
jQuery("#autoOpcao").html(htmlLista);
jQuery("#complAutoSugestao").html(htmlListaCompl);
});
break;
case "ncmBarra":
case "ncm":
jQuery("#assistenteAutoSugestao").hide();
//Busca a descricao do ncm
ControleMercadoria.autocompletarNCM(jQuery.trim(jQuery("#" + campo).val()), function(listaNCMs){
//Inicia a lista
var htmlLista = "";
//Lista os partNumbers
for (var i = 0; i < listaNCMs.length; i++)
htmlLista = htmlLista + "<option value='" + listaNCMs[i].codigo + "'>" + listaNCMs[i].codigo + "</option>";
//Se lista for vazia fecha a div
if (htmlLista == ""){
jQuery("#autosugestao").css("display", "none");
return;
}
//Insere a lista no select
jQuery("#autoOpcao").html(htmlLista);
});
break;
}
//Busca a posio da caixa
var origemTop = origemLeft = 0;
var obj = document.getElementById(campo);
if (obj.offsetParent) {
do {
origemLeft += obj.offsetLeft;
origemTop += obj.offsetTop;
} while (obj = obj.offsetParent);
}
//Posiciona a caixa de auto sugesto e mostra
jQuery("#autosugestao").css("left", origemLeft);
jQuery("#autosugestao").css("top", origemTop + jQuery("#" + campo).height() + 5);
jQuery("#autosugestao").css("display", "block");
}
Olá…
Bem, apenas uma dica:
E se você limitasse a quantidade de resultados que devem ser mostrados? Por exemplo, 10 resultados por vez.Assim você reduz a quantidade e o tempo da requisição.
Você diz fazer uma paginação em um campo de autocomplete?
Olá…
Não é fazer paginação do altocomplete, mas sim reduzir o número de itens que serão listados.
Por exemplo:
Se um resultado trazer 20.000 resultados. Essa quantidade de dados para o usuário não é muito útil além de ser muito pesado.
A minha dica é para trazer uma quantidade reduzida de dados.
Uma outra dica é começar a fazer a paginação depois que o usuário começar a digitar uma quantidade minima de letras.
Ficou claro?
[]'s
JL
Olá…
Não é fazer paginação do altocomplete, mas sim reduzir o número de itens que serão listados.
Por exemplo:
Se um resultado trazer 20.000 resultados. Essa quantidade de dados para o usuário não é muito útil além de ser muito pesado.
A minha dica é para trazer uma quantidade reduzida de dados.
Uma outra dica é começar a fazer a paginação depois que o usuário começar a digitar uma quantidade minima de letras.
Ficou claro?
Sim amigo, entendi, mas no meu caso, fazer essa redução não é o ideal. Hoje eu faço como você disse, uso uma quantidade mínima de letras. o qual tb não é o ideal. Mas obrigado pela idéia.
Eu iria te sugerir o que foi dito pelo Mero_Aprendiz, mas como isso vc ja esta fazendo, uma outra sugestão é disabilitar o campo de busca quando uma requisição for iniciada e só habilita-lo novamente quando obter o resultado da requisição feita, é a única soluçao que consigo ver para o seu caso, já que até onde conheço n seria possível cancelar uma requisição feita, ja que a requisição ja pode ter sido passada para o banco de dados e tal.
ja tentou enfileirar por callback? desta forma apenas quando a primeira requisição voltar que será desparada a segunda.
desabilite o async do dwr retorne o resultado e depois faça outras buscas e no final de tudo volte a habilitar o async
Sim, amigo, já fiz isso, fica lento por demais.
então é fazer o que os caras falaram mesmo. enxugar no máximo a consulta de retorno tipo um Top 5 ou Limit 5 etc…