2013-04-03 54 views
1

這是代碼:TAG-IT和自動完成功能

$("#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 
        } 
       }); 

服務器端:

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; 
} 

我很困惑,我不知道什麼是正確的代碼把Ajax的成功函數任何人都可以幫助我如何在我的情況下使tagit工作的自動完成功能顯示由ajax調用產生的clientName

回答

1

這實際上有點棘手,我不記得在文檔中看到答案。

我所做的是以下幾點:

$("#[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; 
} 
}); 

很抱歉的壞格式。一對筆記:

  1. 成功的'響應'功能 - 這是一個標記功能,可以理解。我不完全確定它是如何工作的,但請注意,通過這種格式化,您可以讓標籤打印一件東西(「標籤」),並將其值設爲其他值。

  2. 'returnedUsers'數組允許我阻止用戶添加不是由ajax返回的標記。這是很難弄清楚的,所以我希望這對你有幫助。

其他選項列在文檔中,所以我不會進入它們。希望這對你有幫助。簡單地指向文檔是沒有用的 - 我知道!

+0

這是一個很好的答案,但我有一個簡單的問題也是responce包含一個標籤和值希望應該是客戶端的ID如果我們說我想將這些ID存儲在一個隱藏的領域我該如何實現這一目標? – Sora