Erro com CORS ao tentar enviar para API

Olá, estou tentando enviar, mas o erro que me surge é:

Access to XMLHttpRequest at ‘https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token=[TOKEN]’ from origin ‘http://localhost:8000’ has been blocked by CORS policy: Request header field contenttype is not allowed by Access-Control-Allow-Headers in preflight response.

Estou tentando executar pelo xampp, mas quando tento enviar dá esse erro.

Tentei desta forma:

var arquivo = $.getJSON("answer.json");

var xhr = new XMLHttpRequest();
    
xhr.open("POST", 'https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token=[TOKEN]');

xhr.setRequestHeader("contentType", "multipart/form-data");

xhr.send(arquivo);

E continua esse erro de CORS

E também desta forma:

$.getJSON("answer.json", function(data){

    var xhr = new XMLHttpRequest();
        
    xhr.open("POST", 'https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token=[TOKEN]', true);

    xhr.setRequestHeader("contentType", "multipart/form-data");

    xhr.send(data);
});

E continua este erro de CORS e não sei como corrigir. Alguém com esse problema também, ou meu codigo está errado.

Usando o POSTMAN também não consigo, gera um erro de resposta 404.

{
“code”: “not_found”,
“error”: "<not_found> ",
“message”: “Erro processando solução”
}

E assim também da erro:

$.getJSON('answer.json', function(data){
    resposta = data;

    $.ajax({
        type: 'POST',
        contentType: "multipart/form-data",
        url: 'https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token=[TOKEN]',
        data: {"answer": resposta}
    });
});

E assim tbm da erro de 404:

$.getJSON('answer.json', function(data){
    resposta = data;

    $.ajax({
        type: 'POST',
        contentType: "multipart/form-data",
        url: 'https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token=[TOKEN]',
        data: {answer: resposta}
    });
});

E desta forma também:

$.getJSON('answer.json', function(data){
    resposta = data;

    $.ajax({
        type: 'POST',
        contentType: "multipart/form-data",
        url: 'https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token=[TOKEN]',
        answer: resposta
    });
});

E pra que haja registro, verifiquei cada vez que fazia uma requisição se a TOKEN estava correta, e a mesma esta correta sim.

Olá @Sheep7bd, mas pelo que entendi você está enviando o parametro answer como uma String JSON, porém no caso deveria enviar como um arquivo, semelhante a fazer upload de arquivo em um formulario HTTP.

Testa e me avisa por favor :slight_smile:

Olá, efetuei umas alterações no codigo, ficando desta forma:

var file = new File(["answer.json"], "answer", {})

var fd = new FormData();

fd.append("answer", file);

// mostra que a entrada [0] do formData é um answer, [object File]
for (var pair of fd.entries()) {
    console.log(pair[0]+ ', ' + pair[1]); 
}

// aqui mostra que o file é um File {name: "answer", lastModified: 1563290726220, lastModifiedDate: 
//Tue Jul 16 2019 12:25:26 GMT-0300 (Horário Padrão de Brasília), webkitRelativePath: "", size: 11, …}
console.log(file);

//aqui efetuaria o post para a API
$.ajax({
     type: 'POST',
     async: false,
     contentType: "multipart/form-data",
     url: 'https://api.codenation.dev/v1/challenge/dev-ps/submit-solution?token=[TOKEN]',
     formData: fd,
     success: function(sucesso){
         console.log(sucesso)
     },
     error: function(erro){
         console.log(erro);
     }
});

Acredito que agora o AJAX esteja tentando mandar um object FILE mas mesmo assim, continua erro 404. Pode ser o nome do arquivo que esta errado?

Olá, um ponto que pode estar afetando é o header contentType, geralmente as libs quando se envia um formData ele já adiciona o header correto, pode retirar esse header e testar novamente?

Sem o contentType, da erro 400 - Bad request.

Certo, em que ambiente você está rodando esse código, suspeito que o problema possa estar no conteudo do answer.json, da maneira que você esta criando o File, ele está realmente pegando o seu arquivo answer.json?