{"id":386,"date":"2010-10-19T18:53:48","date_gmt":"2010-10-19T20:53:48","guid":{"rendered":"http:\/\/www.nextframework.org\/site\/386\/geral\/ajax-utilizando-a-tag-acall"},"modified":"2016-07-23T14:12:19","modified_gmt":"2016-07-23T17:12:19","slug":"ajax-utilizando-a-tag-acall","status":"publish","type":"post","link":"https:\/\/www.nextframework.org\/site\/386\/geral\/ajax-utilizando-a-tag-acall","title":{"rendered":"AJAX utilizando a tag a:call"},"content":{"rendered":"<p>Esse \u00e9 um tutorial que demonstra algumas utiliza\u00e7\u00f5es para a tag <font face=\"Courier New\">a:call<\/font> do next.<br \/>\n<!--more--><\/p>\n<p>A tag <font face=\"Courier New\">a:call<\/font> \u00e9 uma tag que monta as fun\u00e7\u00f5es javascript necess\u00e1rias para se fazer chamadas AJAX. <\/p>\n<blockquote>\n<p><font style=\"background-color: #ffffff\">Chamadas AJAX s\u00e3o basicamente invoca\u00e7\u00f5es de m\u00e9todos no servidor de forma assincrona, onde \u00e9 poss\u00edvel atualizar partes da p\u00e1gina atual ou executar opera\u00e7\u00f5es no servidor sem a necessidadde de recarregar a p\u00e1gina inteira. Isso economiza recursos tanto do servidor quanto do cliente, possibilitando aplica\u00e7\u00f5es mais ricas e ao mesmo tempo mais eficientes. \u00c9 um recurso muito utilizado e d\u00e1 bastante vida as p\u00e1ginas.<\/font><\/p>\n<\/blockquote>\n<p>Para utilizar a tag <font face=\"Courier New\">a:call<\/font> do next, \u00e9 necess\u00e1rio que seu m\u00f3dulo utilize o arquivo base.jsp. Veja a documenta\u00e7\u00e3o de refer\u00eancia para mais informa\u00e7\u00f5es sobre o base.jsp. Cap\u00edtulo 6 \u2013 MVC.<\/p>\n<p>O primeiro passo para utilizar a tag, \u00e9 importar a tag lib de ajax. Para isso, adicione no seu JSP o seguinte import.<\/p>\n<p><font face=\"Courier New\"><strong>&lt;%@ taglib prefix<\/strong>=&quot;a&quot; <strong>uri<\/strong>=&quot;ajax&quot;<strong>%&gt;<\/strong><\/font><\/p>\n<p>A taglib ajax possui apenas uma tag <font color=\"#008000\" face=\"Courier New\"><strong>call<\/strong><\/font>. Dois atributos dessa tag s\u00e3o obrigat\u00f3rios: <strong><font color=\"#800080\" face=\"Courier New\"><\/font><\/strong><\/p>\n<ul>\n<li><strong><font color=\"#800080\" face=\"Courier New\">functionName<\/font><\/strong>, que \u00e9 o nome da fun\u00e7\u00e3o javascript que ser\u00e1 gerada, e que poder\u00e1 ser invocada pelos seus scripts. <\/li>\n<li><strong><font color=\"#800080\" face=\"Courier New\">action<\/font><\/strong>, que \u00e9 o nome da action no controller que ir\u00e1 receber a chamada.<\/li>\n<\/ul>\n<p>A tag <font color=\"#008000\" face=\"Courier New\"><strong>call<\/strong><\/font> possui outros 3 atributos, que s\u00e3o opcionais.     <\/p>\n<ul>\n<li><strong><font color=\"#800080\" face=\"Courier New\">callback<\/font><\/strong>, que \u00e9 o nome da fun\u00e7\u00e3o javascript que ir\u00e1 receber a resposta do servidor. Se desejar voc\u00ea pode escrever uma fun\u00e7\u00e3o personalizada para tratar os dados recebidos. A fun\u00e7\u00e3o de callback padr\u00e3o faz um <font face=\"Courier New\">eval <\/font>do conte\u00fado retornado.<\/li>\n<li><strong><font color=\"#800080\" face=\"Courier New\">parameters<\/font><\/strong>, que \u00e9 a lista de parametros a ser passada para o servidor. Os par\u00e2metros devem ser especificados na sintaxe de URL, ex: param1=value1&amp;param2=value2.<\/li>\n<li><strong><font color=\"#800080\" face=\"Courier New\">url<\/font><\/strong>, que \u00e9 a url do controller para onde a chamada deve ser enviada. Se n\u00e3o for informado o controller chamado ser\u00e1 o mesmo que recebeu a requisi\u00e7\u00e3o que renderizou a p\u00e1gina.<\/li>\n<\/ul>\n<ul>A seguir ser\u00e3o apresentados alguns exemplos de utiliza\u00e7\u00e3o da tag. A vers\u00e3o utilizada para testes dos exemplos \u00e9 a 3.5.1.<\/ul>\n<ul><\/ul>\n<h3>Exemplo 1 \u2013 B\u00e1sico<\/h3>\n<p>&#160;<\/p>\n<p>Nesse exemplo ser\u00e1 mostrada a chamada mais simples de chama AJAX. Ser\u00e1 renderizado um bot\u00e3o que ao ser clicado envia uma requisi\u00e7\u00e3o ao servidor, que devolve um comando alert para o browser. <\/p>\n<h4>Controller<\/h4>\n<p><font face=\"Courier New\"><strong>package<\/strong> controller; <\/font><\/p>\n<p><font face=\"Courier New\"><strong>import<\/strong> org.nextframework.controller.Controller;      <br \/><strong>import<\/strong> org.nextframework.controller.DefaultAction;      <br \/><strong>import<\/strong> org.nextframework.controller.MultiActionController;      <br \/><strong>import<\/strong> org.nextframework.view.ajax.View; <\/font><\/p>\n<p><font face=\"Courier New\">@Controller(path=&quot;\/modulo\/ajax&quot;)     <br \/><strong>public class<\/strong> AjaxController <strong>extends<\/strong> MultiActionController{ <\/font><\/p>\n<p><font face=\"Courier New\">&#160;&#160;&#160; \/**     <br \/>&#160;&#160;&#160;&#160; * Action default.      <br \/>&#160;&#160;&#160;&#160; * Ser\u00e1 chamada pelo browser diretamente para renderizar a p\u00e1gina      <br \/>&#160;&#160;&#160;&#160; * @return      <br \/>&#160;&#160;&#160;&#160; *\/      <br \/>&#160;&#160;&#160; @DefaultAction      <br \/>&#160;&#160;&#160; <strong>public<\/strong> String pagina(){      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <strong>return<\/strong> &quot;pagina&quot;;      <br \/>&#160;&#160;&#160; }      <br \/><\/font><\/p>\n<p><font face=\"Courier New\">&#160;&#160;&#160; <strong>public void<\/strong> actionAjax(){      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; \/*      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; * A classe View possui alguns m\u00e9todos para facilitar o envio de informa\u00e7\u00f5es para o cliente.      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; * Basicamente cada comando representa um print na sa\u00edda do response.      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; *\/      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; View.getCurrent().alert(&quot;Conte\u00fado AJAX enviado pelo servidor&quot;);      <br \/>&#160;&#160;&#160; }      <br \/>}<\/font><\/p>\n<h4>&#160;<\/h4>\n<h4>JSP (pagina.jsp)<\/h4>\n<p>&lt;%@ taglib prefix=&quot;a&quot; uri=&quot;ajax&quot;%&gt; <\/p>\n<p>Essa \u00e9 a p\u00e1gina que utilizar\u00e1 AJAX. <\/p>\n<p>&lt;button onclick=&quot;chamarAjax()&quot;&gt;Clique para efetuar o AJAX&lt;\/button&gt; <\/p>\n<p>&lt;a:call functionName=&quot;chamarAjax&quot; action=&quot;actionAjax&quot; \/&gt;<\/p>\n<h3>&#160;<\/h3>\n<h3>Exemplo 2 \u2013 Alterando o conte\u00fado do HTML<\/h3>\n<p>&#160;<\/p>\n<p>No segundo exemplo iremos alterar o conte\u00fado de um DIV, com o conte\u00fado enviado pelo servidor. <\/p>\n<h4>Controller<\/h4>\n<p><font face=\"Courier New\"><strong>package<\/strong> controller; <\/font><\/p>\n<p><font face=\"Courier New\"><strong>import<\/strong> org.nextframework.controller.Controller;      <br \/><strong>import<\/strong> org.nextframework.controller.DefaultAction;      <br \/><strong>import<\/strong> org.nextframework.controller.MultiActionController;      <br \/><strong>import<\/strong> org.nextframework.view.ajax.View; <\/font><\/p>\n<p><font face=\"Courier New\">@Controller(path=&quot;\/modulo\/ajax&quot;)     <br \/><strong>public class<\/strong> AjaxController <strong>extends<\/strong> MultiActionController{ <\/font><\/p>\n<p><font face=\"Courier New\">&#160;&#160;&#160; \/**     <br \/>&#160;&#160;&#160;&#160; * Action default.      <br \/>&#160;&#160;&#160;&#160; * Ser\u00e1 chamada pelo browser diretamente para renderizar a p\u00e1gina      <br \/>&#160;&#160;&#160;&#160; * @return      <br \/>&#160;&#160;&#160;&#160; *\/      <br \/>&#160;&#160;&#160; @DefaultAction      <br \/>&#160;&#160;&#160; <strong>public<\/strong> String pagina(){      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <strong>return<\/strong> &quot;pagina&quot;;      <br \/>&#160;&#160;&#160; }      <br \/>&#160;&#160;&#160; <strong>public void<\/strong> actionAjax(){      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; \/\/o eval s\u00f3 funcionar\u00e1 se a fun\u00e7\u00e3o callback do cliente for       <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; \/\/a fun\u00e7\u00e3o default (ou seja, callback n\u00e3o especificado)      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; View      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .getCurrent()      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .eval(&quot;document.getElementById(&#8216;conteudo&#8217;).innerHTML = &quot; +      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;&#8217;Novo conte\u00fado enviado pelo servidor&#8217;;&quot;)      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .eval(&quot;document.getElementById(&#8216;conteudo&#8217;).style.backgroundColor = &quot; +      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;&#8217;#DEDE55&#8242;;&quot;); \/\/\u00e9 poss\u00edvel enviar v\u00e1rios comandos      <br \/>&#160;&#160;&#160; }      <br \/>}<\/font><\/p>\n<p>&#160;<\/p>\n<h4>JSP (pagina.jsp)<\/h4>\n<p><font face=\"Courier New\">&lt;%@ taglib prefix=&quot;a&quot; uri=&quot;ajax&quot;%&gt; <\/font><\/p>\n<p><font face=\"Courier New\">Essa \u00e9 a p\u00e1gina que utilizar\u00e1 AJAX. <\/font><\/p>\n<p><font face=\"Courier New\">&lt;div id=&quot;conteudo&quot; style=&quot;border:1px solid red&quot;&gt;     <br \/> Conte\u00fado que ser\u00e1 alterado      <br \/>&lt;\/div&gt; <\/font><\/p>\n<p><font face=\"Courier New\">&lt;button onclick=&quot;chamarAjax()&quot;&gt;Clique para efetuar o AJAX&lt;\/button&gt; <\/font><\/p>\n<p><font face=\"Courier New\">&lt;a:call functionName=&quot;chamarAjax&quot; action=&quot;actionAjax&quot; \/&gt;<\/font><\/p>\n<p>&#160;<\/p>\n<h3>Exemplo 3 \u2013 Enviando par\u00e2metros para o servidor<\/h3>\n<p>&#160;<\/p>\n<p>Nesse exemplo \u00e9 mostrado como \u00e9 poss\u00edvel passar par\u00e2metros para o servidor.<\/p>\n<h4>Controller<\/h4>\n<p><font face=\"Courier New\"><strong>package<\/strong> controller; <\/font><\/p>\n<p><font face=\"Courier New\"><strong>import<\/strong> org.nextframework.controller.Controller;      <br \/><strong>import<\/strong> org.nextframework.controller.DefaultAction;      <br \/><strong>import<\/strong> org.nextframework.controller.MultiActionController;      <br \/><strong>import<\/strong> org.nextframework.view.ajax.View; <\/font><\/p>\n<p><font face=\"Courier New\">@Controller(path=&quot;\/modulo\/ajax&quot;)     <br \/><strong>public class<\/strong> AjaxController <strong>extends<\/strong> MultiActionController{ <\/font><\/p>\n<p><font face=\"Courier New\">&#160;&#160;&#160; @DefaultAction     <br \/>&#160;&#160;&#160; <strong>public<\/strong> String pagina(){      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <strong>return<\/strong> &quot;pagina&quot;;      <br \/>&#160;&#160;&#160; }      <br \/>&#160;&#160;&#160; <strong>public void<\/strong> actionAjax(){      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; \/\/pegamos o parametro enviado pelo cliente para montar a resposta      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; String id = getParameter(&quot;id&quot;);      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; View      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .getCurrent()      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .eval(&quot;document.getElementById(&#8216;&quot;+id+&quot;&#8217;).innerHTML = &quot; +      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;&#8217;Novo conte\u00fado enviado pelo servidor&#8217;;&quot;)      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .eval(&quot;document.getElementById(&#8216;&quot;+id+&quot;&#8217;).style.backgroundColor = &quot; +      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;&#8217;#DEDE55&#8242;;&quot;); \/\/\u00e9 poss\u00edvel enviar v\u00e1rios comandos      <br \/>&#160;&#160;&#160; }      <br \/>}<\/font><\/p>\n<h4>JSP (pagina.jsp)<\/h4>\n<p><font face=\"Courier New\">&lt;%@ taglib prefix=&quot;a&quot; uri=&quot;ajax&quot;%&gt; <\/font><\/p>\n<p><font face=\"Courier New\">Essa \u00e9 a p\u00e1gina que utilizar\u00e1 AJAX. <\/font><\/p>\n<p><font face=\"Courier New\">&lt;div id=&quot;conteudo&quot; style=&quot;border:1px solid red&quot;&gt;     <br \/> Conte\u00fado que ser\u00e1 alterado      <br \/>&lt;\/div&gt; <\/font><\/p>\n<p><font face=\"Courier New\">&lt;button onclick=&quot;chamarAjax()&quot;&gt;Clique para efetuar o AJAX&lt;\/button&gt; <\/font><\/p>\n<p><font face=\"Courier New\">&lt;a:call functionName=&quot;chamarAjax&quot; action=&quot;actionAjax&quot; parameters=&quot;id=conteudo&quot;\/&gt;<\/font><\/p>\n<h3>&#160;<\/h3>\n<h3>Exemplo 4 \u2013 Par\u00e2metros Din\u00e2micos<\/h3>\n<p>&#160;<\/p>\n<p>\u00c9 tamb\u00e9m poss\u00edvel montar os par\u00e2metros dinamicamente via c\u00f3digo javascript, para isso utilizaremos uma constru\u00e7\u00e3o especial no atributo parameters. Antes de clicar no bot\u00e3o para chamar o AJAX preencha no input o valor 1, 2 ou 3.<\/p>\n<p>&#160;<\/p>\n<h4>Controller<\/h4>\n<p><font face=\"Courier New\"><strong>package<\/strong> controller; <\/font><\/p>\n<p><font face=\"Courier New\"><strong>import<\/strong> org.nextframework.controller.Controller;      <br \/><strong>import<\/strong> org.nextframework.controller.DefaultAction;      <br \/><strong>import<\/strong> org.nextframework.controller.MultiActionController;      <br \/><strong>import<\/strong> org.nextframework.view.ajax.View; <\/font><\/p>\n<p><font face=\"Courier New\">@Controller(path=&quot;\/modulo\/ajax&quot;)     <br \/><strong>public class<\/strong> AjaxController <strong>extends<\/strong> MultiActionController{ <\/font><\/p>\n<p><font face=\"Courier New\">&#160;&#160;&#160; @DefaultAction     <br \/>&#160;&#160;&#160; <strong>public<\/strong> String pagina(){      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; return &quot;pagina&quot;;      <br \/>&#160;&#160;&#160; }      <br \/>&#160;&#160;&#160; <strong>public void<\/strong> actionAjax(){      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; \/\/pegamos o parametro enviado pelo cliente para montar a resposta      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; String id = getParameter(&quot;id&quot;);      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; View      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .getCurrent()      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .eval(&quot;document.getElementById(&#8216;&quot;+id+&quot;&#8217;).innerHTML = &quot; +      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;&#8217;Novo conte\u00fado enviado pelo servidor&#8217;;&quot;)      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .eval(&quot;document.getElementById(&#8216;&quot;+id+&quot;&#8217;).style.backgroundColor = &quot; +      <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &quot;&#8217;#DEDE55&#8242;;&quot;); \/\/\u00e9 poss\u00edvel enviar v\u00e1rios comandos      <br \/>&#160;&#160;&#160; }      <br \/>}<\/font><\/p>\n<p>&#160;<\/p>\n<h4>JSP (pagina.jsp)<\/h4>\n<p><font face=\"Courier New\">&lt;%@ taglib prefix=&quot;a&quot; uri=&quot;ajax&quot;%&gt;     <br \/>&lt;%@ taglib prefix=&quot;n&quot; uri=&quot;next&quot;%&gt; <\/font><\/p>\n<p><font face=\"Courier New\">Essa \u00e9 a p\u00e1gina que utilizar\u00e1 AJAX. <\/font><\/p>\n<p><font face=\"Courier New\">&lt;div id=&quot;conteudo1&quot; style=&quot;border:1px solid red;&quot;&gt;     <br \/> Conte\u00fado que ser\u00e1 alterado 1      <br \/>&lt;\/div&gt;      <br \/>&lt;div id=&quot;conteudo2&quot; style=&quot;border:1px solid green;&quot;&gt;      <br \/> Conte\u00fado que ser\u00e1 alterado 2      <br \/>&lt;\/div&gt;      <br \/>&lt;div id=&quot;conteudo3&quot; style=&quot;border:1px solid blue;&quot;&gt;      <br \/> Conte\u00fado que ser\u00e1 alterado 3      <br \/>&lt;\/div&gt; <\/font><\/p>\n<p><font face=\"Courier New\">Digite qual conte\u00fado deseja alterar (1, 2 ou 3): &lt;n:input type=&quot;integer&quot; value=&quot;1&quot; id=&quot;numero&quot;\/&gt; <\/font><\/p>\n<p><font face=\"Courier New\">&lt;button onclick=&quot;chamarAjax()&quot;&gt;Clique para efetuar o AJAX&lt;\/button&gt; <\/font><\/p>\n<p><font face=\"Courier New\">&lt;a:call functionName=&quot;chamarAjax&quot; action=&quot;actionAjax&quot; parameters=&quot;javascript:&#8217;id=conteudo&#8217;+document.getElementById(&#8216;numero&#8217;).value&quot;\/&gt;<\/font><\/p>\n<p>Tamb\u00e9m \u00e9 poss\u00edvel alterar a montagem dos parametros para delegar a uma fun\u00e7\u00e3o javascript, conforme exemplo:<\/p>\n<p><font face=\"Courier New\">&lt;a:call functionName=&quot;chamarAjax&quot; action=&quot;actionAjax&quot; parameters=&quot;javascript:montarParametros()&quot;\/&gt; <\/font><\/p>\n<p><font face=\"Courier New\">&lt;script type=&quot;text\/javascript&quot;&gt;     <br \/>function montarParametros(){      <br \/>&#160;&#160;&#160; return &#8216;id=conteudo&#8217; +&#160; document.getElementById(&#8216;numero&#8217;).value;      <br \/>}      <br \/>&lt;\/script&gt;<\/font><\/p>\n<p>&#160;<\/p>\n<p>Como visto nos exemplos a chamada ajax no servidor \u00e9 feita de forma bem simples. Basicamente a tag a:call monta a fun\u00e7\u00e3o javascript e voc\u00ea apenas chama na sua p\u00e1gina onde for necess\u00e1rio. No servidor a classe View, possui alguns m\u00e9todos utilit\u00e1rios para escrever no response. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esse \u00e9 um tutorial que demonstra algumas utiliza\u00e7\u00f5es para a tag a:call do next.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-386","post","type-post","status-publish","format-standard","hentry","category-geral"],"_links":{"self":[{"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/posts\/386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/comments?post=386"}],"version-history":[{"count":2,"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/posts\/386\/revisions"}],"predecessor-version":[{"id":663,"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/posts\/386\/revisions\/663"}],"wp:attachment":[{"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/media?parent=386"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/categories?post=386"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nextframework.org\/site\/wp-json\/wp\/v2\/tags?post=386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}