2 votes

Le plugin jquery Autocomplete ne fonctionne pas lorsque les données proviennent d'une base de données ?

J'utilise ce plugin pour la suggestion de zones de texte (complétion automatique). Cela fonctionne bien tant que la liste est codée en dur. comme ceci :-

var suggère = ["Action", "ActionScript", "Borland"] ;

Mais j'ai besoin de la liste des mots de la base de données. Lorsque je récupère la liste de la base de données, le plugin ne répond pas. Voici ce que je fais

Plugin que j'utilise:-

https://github.com/imankulov/asuggest/

Jquery:-

$(document).ready(function() {
        var suggests = getList();
        var $txt = $('#<%=txtArea.ClientID %>');
        $txt.asuggest(suggests);
    });

function getList() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "ajaxService.asmx/autocompletelist",
        data: "{groupUid:'" + 4 + "', clientUid: '" + 8 + "'}",
        dataType: "json",
        success: function(data) {
            return (data.d);
        },
        error: function(result) {
            alert("No Match");
        }
    });
}

code derrière :-

[WebMethod]
public List<string> autocompletelist(int groupUid, int clientUid)
{
        //call to database for the list. 
          //code/

        List<string> result = new List<string>();
        result.Add("Action");
        result.Add("ActionScript");
        result.Add("Borland");
        return result;
}

Veuillez suggérer ? Est-ce que cela a quelque chose à voir avec les crochets ? Comment obtenir cela en retour de la base de données ?

1voto

A. Damond Points 162

Un ajax success est exécutée de manière asynchrone (elle n'est pas lancée avant la réception d'une réponse), mais vous essayez d'utiliser son résultat de manière synchrone. Ainsi, lorsque vous appelez $txt.asuggest(suggests); rien ne se passe car suggests n'a pas encore été remplie. C'est parce que la requête ajax n'est pas terminée, mais votre code ne le sait pas. La façon la plus simple de résoudre ce problème est de placer la logique de l'interface utilisateur dans la section success la méthode elle-même. De cette façon, votre plugin ne sera pas appelé avant que la méthode suggests est garantie d'être remplie. Essayez ceci :

$(document).ready(function() {
    getList();
});

function getList() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "ajaxService.asmx/autocompletelist",
        data: "{groupUid:'" + 4 + "', clientUid: '" + 8 + "'}",
        dataType: "json",
        success: function(data) {
            var $txt = $('#<%=txtArea.ClientID %>');
            $txt.asuggest(data);
        },
        error: function(result) {
            alert("No Match");
        }
    });
}

0voto

Leon Points 1

Vous pouvez d'abord procéder comme suit alert(suggestions) , vérifiez si le résultat est correct,puis convertissez le résultat en tableau. convertir json en tableau :

var dataArray=eval(jsonStr);
for(var i in dataArray)
{
    //TODO
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X