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