2013-04-03 2 views
1

c'est le code:fonction Tagit et autocomplete

$("#AddFriendToGroup").tagit({ 
       autocomplete: { 
        source: function (request, response) { 
         $.ajax({ 
          type: 'POST', 
          url: 'ChatPageTest.aspx/tagFriendAutocomplete', 
          data: "{'ClientID':'" + $("#UserID").val() + "','ClientName': '" + request.term + "'}", 
          contentType: 'application/json; charset=utf-8', 
          dataType: 'json', 
          success: function (data) { 
          }, 
          error: function (xhr) { 
           alert("responseText: " + xhr.responseText); 
          } 
         }); 
        }, 
         minLength: 2 
        } 
       }); 
côté serveur

:

public static string tagFriendAutocomplete(int ClientID,string ClientName) 
{ 
    string Result = ""; 
    string query = "select fr.FRIEND_ID,c.[USER_NAME] from clients c inner join friends fr on c.CLIENT_ID=fr.FRIEND_ID and fr.CLIENT_ID=" + ClientID + " and c.[USER_NAME] like '%" + ClientName + "%' "; 

    DataTable dt = new SQLHelper(SQLHelper.ConnectionStrings.WebSiteConnectionString).getQueryResult(query); 
    if (dt.Rows.Count > 0) 
    { 
     for(int i=0;i<dt.Rows.Count;i++) 
     { 
      Result += dt.Rows[i]["FRIEND_ID"] + "," + dt.Rows[i]["USER_NAME"]; 
     } 
    } 

    return Result; 
} 

je suis confus, je ne sais pas quel est le code droit de mettre sur la fonction ajax succès peut-on aidez-moi comment puis-je faire la fonction de saisie semi-automatique du travail tagit dans mon cas pour montrer le clientName résultant de l'appel ajax

Répondre

1

C'est en fait un peu compliqué et je ne me souviens pas avoir vu la réponse dans les documents.

Ce que je fait est la suivante:

$("#[id of tag to attach to]").tagit({ 
autocomplete: { 
    source: function(request, response) { 
     if (acAjax && acAjax.readyState != 4) 
      acAjax.abort(); 

     $("#loading").show(); 

     acAjax = $.ajax({ 
      url: [server url], 
      dataType: "json", 
      data: { 
       term: request.term 
      }, 
      success: function(data) { 
       returnedUsers = data; 
       response($.map(data, function(item) { 
        return { 
         label: item, 
         value: item 
        } 
       })); 
      }, 
      error: function(xhr, status, error) { 
       returnedUsers = []; 
      }, 
      complete: function(xhr, status, error) { 
       $("#loading").hide(); 
      } 
     }); 
    }, 
    minLength: 2 
}, 
allowSpaces: true, 
beforeTagAdded: function(event, ui) { 
    if ($.inArray(ui.tagLabel, returnedUsers)==-1) 
     return false; 
} 
}); 

Désolé pour la mauvaise mise en forme. Couple de notes:

  1. la fonction 'réponse' réussie - c'est une fonction que tagit comprend. Je ne suis pas complètement sûr de la façon dont cela fonctionne, mais notez qu'avec cette mise en forme, vous pouvez faire en sorte que le tag imprime une chose ("label"), et que la valeur soit quelque chose d'autre.

  2. Le tableau 'returnsUsers' me permet d'empêcher l'utilisateur d'ajouter une balise non renvoyée par l'ajax. C'était un peu difficile à comprendre, alors j'espère que cela vous sera utile.

Les autres options sont listées dans les docs, donc je ne vais pas y aller. J'espère que ça te sera utile. Il ne sert à rien de pointer du doigt les docs - je sais!

+0

c'est une bonne réponse mais j'ai une question simple aussi la réponse contient un label et un souhait de valeur devrait être l'id du client si disons que je veux stocker ces id dans un champ caché comment puis-je réaliser cela? – Sora