Se alguma pergunta ou resposta lhe foi útil, não deixe de dar seu voto positivo!

Como chamar REST Datasul via ajax ?

Não estou conseguindo realizar o consumo de método REST padrão do Datasul via ajax no javascript. Num primeiro momento eu executo um método para obter o token Uso esse link:

/dts/datasul-rest/resources/login?username=login-do-usuario&password=JXsYCCQOkqXETUeWsCPTXemTJds= O retorno desse link é o token e gravo no campo do formulário. Logo após executo outro método passando esse token.

/dts/datasul-rest/resources/dbo/inbo/boin142 (especificamente este método retorna os grupos de estoque do Datasul) No navegador aparece como erro e inspecionando o retorno ele parece desconhecer o token enviado no header pois aparece a página do login.

Realizando tudo isso diretamente no navegador funciona direitinho, inclusive no SOAPUI ou no Postman, mas dentro da página via javascript usando $ajax não funciona.

Será que cada chamada $ajax possui sua própria "sessão"?, pois na segunda o token passado não seria da sessão. Se for isso como resolver? Existe outra forma de chamar o método já passando o token?

$.ajax({
    url: '<host>/dts/datasul-rest/resources/dbo/inbo/boin142',
    dataType: "json",
    type: "GET",
    crossDomain: true,
    success: function(res, status, xhr) {
    console.log("RES:"    + res);
    console.log("status:" + status);
    console.log("xhr:"    + xhr);
    },
    error: function (xhr, ajaxOptions, thrownError) {
      console.log("ERRO NO RETORNO");
      console.log(xhr);
      console.log(xhr.status);
    },       
    beforeSend: setHeader           
  });       

function setHeader(xhr) {      
  console.log('header...');     
  token = $('#token').val();
  xhr.setRequestHeader("Authorization", "cookie:JOSSO_SESSIONID=" + token);   
}
compartilhar
  • Bom dia Denilson,

    O javascript tem um comportamento assíncrono, talvez o seu problema é que ambos os métodos estão sendo disparados ao mesmo tempo, com isso o token ainda não foi gerado.

    Tente colocar alguns logs em cada método, colocando o timestamp, talvez te ajude a verificar se realmente foi um problema pela questão assíncrono dos processos, também verifique se o token está preenchido e válido no segundo método.

    Daniel Mendes   08 de Apr de 2019
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

3 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags restdatasul restapi ou faça a sua própria pergunta.