{"id":1527,"date":"2011-02-19T23:19:17","date_gmt":"2011-02-19T17:49:17","guid":{"rendered":"http:\/\/JitendraZaa.com\/blog\/?p=1527"},"modified":"2011-02-19T23:19:17","modified_gmt":"2011-02-19T17:49:17","slug":"ajax-based-multiselect-jquery-autocomplete-control-in-asp-net","status":"publish","type":"post","link":"https:\/\/www.jitendrazaa.com\/blog\/microsoft\/net\/ajax-based-multiselect-jquery-autocomplete-control-in-asp-net\/","title":{"rendered":"Ajax Based Multiselect JQuery Autocomplete Control in ASP.Net"},"content":{"rendered":"<p>In this article i will explain step by step creating Ajax Based\u00a0Multi select\u00a0JQuery Autocomplete User Control.<\/p>\n<p>Here, we will use <strong><a title=\"JQuery Autocomplete\" href=\"http:\/\/jqueryui.com\/demos\/autocomplete\/\" target=\"_blank\">Jquery UI Tool&#8217;s Autocomplete Control<\/a>. <\/strong>To get the Data using AJAX, here we will try\u00a0<strong><a title=\"Handlers in ASP.Net\" href=\"https:\/\/jitendrazaa.com\/view_tutorial.php?id=62\" target=\"_blank\">Handlers <\/a><\/strong>of ASP. Using Handlers against simple asp.net page is that, if we will use ASPX page then it will go through all the phases of page (nearly 1o)\u00a0whereas Handler is faster than ASPX page.<\/p>\n<figure id=\"attachment_1541\" aria-describedby=\"caption-attachment-1541\" style=\"width: 320px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2011\/02\/Ajax-Based-Multiselect-JQuery-Autocomplete-Control-in-ASP.Net_.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1541\" title=\"Ajax Based Multiselect JQuery Autocomplete Control in ASP.Net\" src=\"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2011\/02\/Ajax-Based-Multiselect-JQuery-Autocomplete-Control-in-ASP.Net_.png?resize=320%2C233&#038;ssl=1\" alt=\"Ajax Based Multiselect JQuery Autocomplete Control in ASP.Net\" width=\"320\" height=\"233\" \/><\/a><figcaption id=\"caption-attachment-1541\" class=\"wp-caption-text\">Ajax Based Multiselect JQuery Autocomplete Control in ASP.Net<\/figcaption><\/figure>\n<p><strong>Step 1 : creating Handler<\/strong><\/p>\n<p>In step 1, we will create the handler which will provide the data in form of JSON. <a title=\"Create JSON from C# - By Jitendra Zaa\" href=\"http:\/\/www.codeproject.com\/KB\/aspnet\/CSJSON.aspx\" target=\"_blank\">To know more about \u00a0creating JSON is C#, read this article written by me on codeproject<\/a>.<\/p>\n<p><strong><!--more--><span style=\"text-decoration: underline;\">File Name : UsersList.ashx<\/span><\/strong><\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nusing System;\nusing System.Data;\nusing System.Web;\nusing System.Collections;\nusing System.Web.Services;\nusing System.Web.Services.Protocols;\nusing System.Collections.Generic;\nusing Newtonsoft.Json;\n\nnamespace AutoComplete\n{\n    \/\/\/ &lt;summary&gt;\n    \/\/\/ Summary description for $codebehindclassname$\n    \/\/\/ &lt;\/summary&gt;\n    &#x5B;WebService(Namespace = &quot;http:\/\/tempuri.org\/&quot;)]\n    &#x5B;WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]\n    public class UsersList : IHttpHandler\n    {\n\n        public void ProcessRequest(HttpContext context)\n        {\n            string prefixText = context.Request.QueryString&#x5B;&quot;term&quot;];\n            \/\/prefixText  is text typed by user to search\n            string values = getUsersList(prefixText);\n            context.Response.ContentType = &quot;application\/json&quot;;\n            context.Response.Write(values);\n        }\n\n        private string getUsersList(string prefixText)\n        {\n            List&lt;Emp&gt; eList = new List&lt;Emp&gt;();\n            System.Text.StringBuilder sb = new System.Text.StringBuilder();\n            DataTable dtUserPickerData = DataBase.LoadDataForUserPicker(prefixText);\n            \/\/Here capacity means number of records shown in AutoComplete\n            int capacity = 10;\n            int capacityCounter = 0;\n            foreach (DataRow dr in dtUserPickerData.Rows)\n            {\n                if (capacityCounter &lt;= capacity)\n                {\n                    Emp e = new Emp();\n                    e.value = dr&#x5B;3].ToString();\/\/Ex : jitendra.zaa@xyz.com\n                    e.label = dr&#x5B;0].ToString() + &quot;( &quot; + dr&#x5B;3].ToString() + &quot; )&quot;;\/\/Ex : jitendra Zaa (jitendra.zaa@xyz.com)\n                    eList.Add(e);\n                    capacityCounter++;\n                }\n                else\n                {\n                    break;\n                }\n            }\n            \/\/JsonConvert.SerializeObject() will convert the List into JSON text\n            string ans = JsonConvert.SerializeObject(eList);\n            return ans;\n        }\n\n        public bool IsReusable\n        {\n            get\n            {\n                return false;\n            }\n        }\n    }\n    class Emp\n    {\n        private string _name;\n        private string _to;\n\n        public string value\n        {\n            get { return _to; }\n            set { _to = value; }\n        }\n        public string label\n        {\n            get { return _name; }\n            set { _name = value; }\n        }\n\n    }\n}\n<\/pre>\n<p>The text which you type to search will come as request\u00a0parameter\u00a0&#8220;term&#8221;.<br \/>\nIn above code, assume that i am getting the datatable from the database which contains the username and his email id. the return type of the handler is <strong>&#8220;application\/json&#8221;<\/strong> which indicates that it is returning <strong>JSON<\/strong> object in response.<\/p>\n<p><strong>Step 2 : Creating User Control<\/strong><\/p>\n<p>In this section we will create a usercontrol in our project.<\/p>\n<p><strong><span style=\"text-decoration: underline;\">FileName : AutoComplete.ascx.cs<\/span><\/strong><\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nnamespace AutoComplete\n{\n    public partial class AutoComplete : System.Web.UI.UserControl\n    {\n\n        private bool _isMultiLine;\n\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ Gets or sets a value indicating whether this instance is multi line.\n        \/\/\/ &lt;\/summary&gt;\n        \/\/\/ &lt;value&gt;\n        \/\/\/ \t&lt;c&gt;true&lt;\/c&gt; if this instance is multi line; otherwise, &lt;c&gt;false&lt;\/c&gt;.\n        \/\/\/ &lt;\/value&gt;\n        public bool IsMultiLine\n        {\n            get { return _isMultiLine; }\n            set { _isMultiLine = value; }\n        }\n\n        protected void Page_Load(object sender, EventArgs e)\n        {\n            if (!IsPostBack)\n            {\n                #region Register JS Script, if Not registered\n                if (!Page.ClientScript. IsClientScriptIncludeRegistered(&quot;jQueryJsfilename&quot;))\n                {\n                    string jQueryJsfilename = &quot;UserPickerCSS_JS\/Scripts\/jquery-1.4.2.min.js&quot;;\n                    Page.ClientScript .RegisterClientScriptInclude(&quot;jQueryJsfilename&quot;, jQueryJsfilename);\n                }\n                if (!Page.ClientScript. IsClientScriptIncludeRegistered(&quot;JQueryCore&quot;))\n                {\n                    string jQueryAutoCompletefilename = &quot;UserPickerCSS_JS\/Scripts\/jquery.ui.core.js&quot;;\n                    Page.ClientScript .RegisterClientScriptInclude(&quot;JQueryCore&quot;, jQueryAutoCompletefilename);\n                }\n                if (!Page.ClientScript. IsClientScriptIncludeRegistered(&quot;JQueryUIWidget&quot;))\n                {\n                    string jQueryAutoCompletefilename = &quot;UserPickerCSS_JS\/Scripts\/jquery.ui.widget.js&quot;;\n                    Page.ClientScript .RegisterClientScriptInclude(&quot;JQueryUIWidget&quot;, jQueryAutoCompletefilename);\n                }\n                if (!Page.ClientScript. IsClientScriptIncludeRegistered(&quot;JQueryPosition&quot;))\n                {\n                    string jQueryAutoCompletefilename = &quot;UserPickerCSS_JS\/Scripts\/jquery.ui.position.js&quot;;\n                    Page.ClientScript .RegisterClientScriptInclude(&quot;JQueryPosition&quot;, jQueryAutoCompletefilename);\n                }\n                if (!Page.ClientScript. IsClientScriptIncludeRegistered(&quot;jQueryAutoCompletefilename&quot;))\n                {\n                    string jQueryAutoCompletefilename = &quot;UserPickerCSS_JS\/Scripts\/jquery.ui.autocomplete.js&quot;;\n                    Page.ClientScript .RegisterClientScriptInclude(&quot;jQueryAutoCompletefilename&quot;, jQueryAutoCompletefilename);\n                }\n                #endregion\n\n                if (IsMultiLine)\n                {\n                    txtSearch.TextMode = TextBoxMode.MultiLine;\n                }\n            }\n        }\n    }\n}\n<\/pre>\n<p>In above code, at code behind, we have exposed one property named &#8220;isMultiline&#8221;, which will decide that our Autocomplete User picker control is multiline supported or not.<\/p>\n<p>Also, it is possibility that user picker will be used more than one and we must assure that the javascript file should not be added multiple time. So we are checking that file is added or not and if the javascript file is not added then we are registering that on client side.<\/p>\n<p><strong><span style=\"text-decoration: underline;\">File Name : AutoComplete.ascx<\/span><\/strong><\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;%@ Control Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeBehind=&quot;AutoComplete.ascx.cs&quot; Inherits=&quot;AutoComplete.AutoComplete&quot; %&gt;\n&lt;link href='&lt;%=Request.ApplicationPath +&quot;UserPickerCSS_JS\/css\/jquery.ui.all.css&quot;%&gt;' rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; \/&gt;\n&lt;link href=&quot;UserPickerCSS_JS\/css\/demos.css&quot; rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; \/&gt;\n&lt;style type=&quot;text\/css&quot;&gt;\n\t.ui-autocomplete-loading { background: white url('UserPickerCSS_JS\/css\/indicator.gif') right center no-repeat; }\n\t.SearchWidth{width:90%;}\n&lt;\/style&gt;\n&lt;script type=&quot;text\/javascript&quot;&gt;\n\n $(function() {\n\t\tfunction split(val) {\n\t\t\treturn val.split(\/,s*\/);\n\t\t}\n\t\tfunction extractLast(term) {\n\t\t\treturn split(term).pop();\n\t\t}\n\n\t\t$(&quot;#&lt;%=txtSearch.ClientID%&gt;&quot;).autocomplete({\n\t\t\tsource: function(request, response) {\n\t\t\t\t$.getJSON(&quot;UsersList.ashx&quot;, {\n\t\t\t\t\tterm: extractLast(request.term)\n\t\t\t\t}, response);\n\t\t\t},\n\t\t\tsearch: function() {\n\t\t\t\t\/\/ custom minLength\n\t\t\t\tvar term = extractLast(this.value);\n\t\t\t\tif (term.length &lt; 2) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\t\/\/ prevent value inserted on focus\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tselect: function(event, ui) {\n\t\t\t\tvar terms = split( this.value );\n\t\t\t\t\/\/ remove the current input\n\t\t\t\tterms.pop();\n\t\t\t\t\/\/ add the selected item\n\t\t\t\tterms.push( ui.item.value );\n\t\t\t\t\/\/ add placeholder to get the comma-and-space at the end\n\t\t\t\tterms.push(&quot;&quot;);\n\t\t\t\tthis.value = terms.join(&quot;, &quot;);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t});\n\n&lt;\/script&gt;\n&lt;asp:TextBox CssClass=&quot;SearchWidth&quot; ID=&quot;txtSearch&quot; runat=&quot;server&quot; Rows=&quot;3&quot;&gt;&lt;\/asp:TextBox&gt;\n&lt;asp:Image ImageAlign=&quot;top&quot; ID=&quot;imgUsersWindow&quot; ImageUrl=&quot;~\/UserPickerCSS_JS\/css\/Users.PNG&quot; ToolTip=&quot;Select a User(s)&quot; style=&quot;cursor:pointer&quot; runat=&quot;server&quot; \/&gt;\n<\/pre>\n<p>At client side, we have written some javascript code which is self explanatory. \u00a0In AJAX method we are calling handler &#8220;UsersList.ashx&#8221; which returns the JSON object.<\/p>\n<p>Now, add this usercontrol anywhere in ASP.net page, it will just run with ultimate\u00a0speed and UI.<\/p>\n<p><a href=\"https:\/\/jitendrazaa.com\/blog\/wp-content\/uploads\/2011\/02\/AutoComplete.zip\">Download Complete Working project of Ajax based Multiselect JQuery Autocomplete control in ASP.net. <\/a> This attachment contains advanced control than explained in this article. \u00a0<strong>It has one UserPicker Window also where user can be selected in Bulk.<\/strong><\/p>\n<p>To control the height of the AutoComplete option displayed, add following css hack in your UserControl Page or where the Autocomplete is added in page:<\/p>\n<pre class=\"brush: css; title: ; notranslate\" title=\"\">\n&lt;style type=&quot;text\/css&quot;&gt;\n.ui-autocomplete {\nmax-height: 100px;\noverflow-y: auto;\n}\n\/* IE 6 doesn't support max-height\n * we use height instead, but this forces the menu to always be this tall\n *\/\n* html .ui-autocomplete {\nheight: 100px;\n}\n&lt;\/style&gt;\n<\/pre>\n<p>Please share your comments and enhancement if needed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tutorial on creating Ajax Based Multiselect JQuery Autocomplete User Control in ASP.Net<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"jz_research_post":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[21],"tags":[33,44,134],"class_list":["post-1527","post","type-post","status-publish","format-standard","hentry","category-net","tag-ajax","tag-autocomplete","tag-jquery"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":3347,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/ajax-based-autocomplete-component-in-salesforce-using-jquery-ui-and-json\/","url_meta":{"origin":1527,"position":0},"title":"AutoComplete Component in Visualforce using JQueryUI","author":"Jitendra","date":"June 28, 2013","format":false,"excerpt":"In this tutorial, I am going to explain very Simple AJAX and JSON based Auto Complete component with the help of JQuery UI. First I am assuming that you already have Static Resource of named \"AutoCompleteWithModal\"\u009d. This Static resource has all images, CSS and JQuery library needed to implement this\u2026","rel":"","context":"In &quot;HTML&quot;","block_context":{"text":"HTML","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/webtech\/web\/"},"img":{"alt_text":"JQuery UI and JSON based AJAX AutoComplete Component in Salesforce","src":"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2013\/06\/JQuery-UI-and-JSON-based-AJAX-AutoComplete-Component-in-Salesforce.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2013\/06\/JQuery-UI-and-JSON-based-AJAX-AutoComplete-Component-in-Salesforce.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2013\/06\/JQuery-UI-and-JSON-based-AJAX-AutoComplete-Component-in-Salesforce.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":3917,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/ajax-based-autocomplete-typeahead-directive-in-angularjs\/","url_meta":{"origin":1527,"position":1},"title":"Ajax based AutoComplete \/ TypeAhead Directive in AngularJS","author":"Jitendra","date":"July 15, 2014","format":false,"excerpt":"Previously we already discussed below Auto Complete components: Ajax Based Multiselect JQuery Autocomplete Control in ASP.Net AutoComplete Component in Visualforce using JQueryUI In this article, we will be creating TypeAhead Directive (Auto Complete) again in Salesforce However this time we will use AngularJs. Why we are using AngularJS ? We\u2026","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"TypeAhead Demo using AngularJs","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2014\/07\/TypeAhead-Demo-using-AngularJs.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2014\/07\/TypeAhead-Demo-using-AngularJs.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2014\/07\/TypeAhead-Demo-using-AngularJs.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2014\/07\/TypeAhead-Demo-using-AngularJs.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":790,"url":"https:\/\/www.jitendrazaa.com\/blog\/microsoft\/net\/row-expand-collapse-using-jquery-and-ajax\/","url_meta":{"origin":1527,"position":2},"title":"Row expand collapse using jquery and Ajax","author":"Jitendra","date":"August 19, 2010","format":false,"excerpt":"Using JQuery and Ajax to expand and collapse the row in ASP.NET","rel":"","context":"In &quot;ASP.NET&quot;","block_context":{"text":"ASP.NET","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/microsoft\/net\/"},"img":{"alt_text":"Ajax JQuery Row Expand Collapse","src":"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2010\/08\/rowexpand-300x203.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2281,"url":"https:\/\/www.jitendrazaa.com\/blog\/webtech\/web\/disable-inputs-after-submit-to-avoid-double-submission-using-jquery-and-ajax\/","url_meta":{"origin":1527,"position":3},"title":"Disable inputs after submit to avoid double submission using JQuery and Ajax","author":"Jitendra","date":"June 24, 2011","format":false,"excerpt":"This article will explain the safe way to submit the forms using JQuery. It will avoid accidental double submission.","rel":"","context":"In &quot;HTML&quot;","block_context":{"text":"HTML","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/webtech\/web\/"},"img":{"alt_text":"Disable inputs after submit to avoid double submission using JQuery","src":"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2011\/06\/Disable-inputs-after-submit-to-avoid-double-submission-using-JQuery.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2395,"url":"https:\/\/www.jitendrazaa.com\/blog\/others\/tips\/asp-net-page-lifecycle\/","url_meta":{"origin":1527,"position":4},"title":"ASP.NET Page Lifecycle","author":"Jitendra","date":"August 24, 2011","format":false,"excerpt":"Tutorial and sample source code on ASP.NET Page Lifecycle","rel":"","context":"In &quot;ASP.NET&quot;","block_context":{"text":"ASP.NET","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/microsoft\/net\/"},"img":{"alt_text":"Control hierarchy after page_init() event in asp.net page life cycle","src":"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2011\/08\/Control-hierarchy-after-page_init-event-in-asp.net-page-life-cycle.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":150,"url":"https:\/\/www.jitendrazaa.com\/blog\/microsoft\/net\/handlers-url-mapping-in-asp-net\/","url_meta":{"origin":1527,"position":5},"title":"Handlers in ASP.NET","author":"Jitendra","date":"May 14, 2010","format":false,"excerpt":"HTTP Handlers is\u00a0a new technique presented in ASP.NET that was not present in the \"Classic ASP\".\u00a0HTTP Handlers are components that implement the System.Web.IHttpHandler interface. Unlike ASP.NET pages\u00a0Handlers dont have HTML-markup file, no events and other supporting. All they have is a code-file (written in any .NET-compatible language) that writes some\u2026","rel":"","context":"In &quot;ASP.NET&quot;","block_context":{"text":"ASP.NET","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/microsoft\/net\/"},"img":{"alt_text":"Step 1","src":"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2010\/05\/AddProject.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/1527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/comments?post=1527"}],"version-history":[{"count":0,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/1527\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/media?parent=1527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/categories?post=1527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/tags?post=1527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}