Загрузка в браузере Chrome файла json - Node.js

378
03 июля 2017, 20:35

Здравствуйте. Дошел в учебнике по js до node.js и есть первая задача где должен загружаться файл json с сервера но мне выдает такую ошибку: index.html:34 XMLHttpRequest cannot load file:///C:/Users/Horchynskyi/phones-async/phones.json. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https. Почитал коментарии многие пишут что работает вроде как только на мозиле почему так? код сервера: и код html:

var http = require('http');
var url = require('url');
var querystring = require('querystring');
var static = require('node-static');
var file = new static.Server('.', {
cache: 0
});
function accept(req, res) {
if (req.url == '/phones.json') {
// искусственная задержка для наглядности
setTimeout(function() {
  file.serve(req, res);
}, 2000);
} else {
file.serve(req, res);
}
}
// ------ запустить сервер -------
if (!module.parent) {
http.createServer(accept).listen(8080);
} else {
exports.accept = accept;
}

в html:

function loadPhones() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'phones.json', true);
xhr.onreadystatechange = function() {
if (xhr.readyState != 4) return;
button.innerHTML = 'Готово!';
if (xhr.status != 200) {
  // обработать ошибку
  alert(xhr.status + ': ' + xhr.statusText);
} else {
  // вывести результат
  alert(xhr.responseText);
}
}
xhr.send();
button.innerHTML = 'Загружаю...';
button.disabled = true;
}
Answer 1

Вероятно ваша клиентская сторона открыта просто как html файл на диске в папке C:/Users/Horchynskyi/phones-async/index.html, потому ссылка формируется на файл (file:///C:/Users/Horchynskyi/phones-async/phones.json), а не по протоколу HTTP . Для того чтобы работало, либо открывайте свой клиент, загружая страницу index.html с того сервера, где лежит phones.json, либо укажите полный путь с доменом и портом в этом месте xhr.open('GET', 'phones.json', true) -> xhr.open('GET', 'http://localhost:8080/phones.json', true). Плюс нужно установить заголовки на сервере, который файл отдает Access-Control-Allow-Origin: *

READ ALSO
Проблема с бесконечным циклом (JS)

Проблема с бесконечным циклом (JS)

Добрый вечерПодскажите, пожалуйста, я новичок и пытаюсь написать алгоритм преобразования арабских чисел в римские

236
Почему не работает код игры «угадай число»?

Почему не работает код игры «угадай число»?

Вы забыли вызвать функцию guessingНужно добавить строчку

185
Есть ли аналог Cheerio на клиенте?

Есть ли аналог Cheerio на клиенте?

Подскажите пожалуйста, есть ли библиотека подобная Cheerio только что бы работала на клиенте?

311
Извлечение текста из строки содержащей HTML

Извлечение текста из строки содержащей HTML

В функцию на обработку поступает текст, к примеру вот такой:

307