«Origin не может делать этот запрос»: я загружаю веб-сайт из папки активов, но мне нужно использовать функцию извлечения для удаленного API - PullRequest
0 голосов
/ 10 октября 2019

У меня есть приложение html / js, которое подключается к нашему API-серверу. При развертывании внутри Android-приложения я пытаюсь использовать fetch для его вызова:

function REQUEST(url, query, post, method) {
  console.log('REQUEST', method, url, query, post);
  url = queryString(HOST_URL + url, query);

  var headers = new Headers()
  headers.append('user-agent', 'Sales/1')
  headers.append('content-type', 'application/json')

  let company = getCompany();
  if (company) {
    headers.append('company', company)
  }

  var bodyData = null;
  if (method == 'POST') {
    bodyData = JSON.stringify(post);
  }

  return fetch(url, {
    body: bodyData,
    credentials: 'include', // include, same-origin, *omit
    headers: headers,
    method: method, // *GET, POST, PUT, DELETE, etc.
    mode: 'cors', // no-cors, cors, *same-origin
  }).then(function (response) {
    console.log('RES', response)
    if (!response.ok) {
      return response.text().then(res => {
        var err =  Error(url + ":_" + response.statusText);
        try {
          const data = JSON.parse(res);
          if (data.hasOwnProperty("message")) {
            err = Error(data.kind + ": " + data.message);
          };
        } catch(ex) {
          console.log('FAIL json err', ex);
           err = Error(url + ":_" + response.statusText + "\n" + res);
        }
        throw err;
      });        
    }
    return response.json();
  })
};

С сервера я получаю:

Источник не может сделать этот запрос

Это потому что андроид отправляет:

content-type: application/json
Origin: file://
Sec-Fetch-Mode: cors
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...