
04.07.2019, 01:05
|
Аспирант
|
|
Регистрация: 20.01.2017
Сообщений: 32
|
|
<XHR> нет ответа responseText
задача: получить responseText от сервера
URL-адрес запроса: https://api.livecoin.net/exchange/ticker
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if(xhr.readyState == 4)
console.log(xhr.responseText)
}
xhr.open("GET", "https://api.livecoin.net/exchange/ticker")
xhr.send()
URL-адрес запроса верный - браузер получает значение:
https://api.livecoin.net/exchange/ticker
при XHR-запросе из js - сервер возвращает пустую строку
состояние объекта xhr.readyState == 4
вопрос: как получить значение xhr.responseText
использую Google Chrome
этот же код для другого URL-адреса работает - responseText получает текст ответа
URL-адрес запроса: https://api.exmo.me/v1/ticker
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if(xhr.readyState == 4)
console.log(xhr.responseText)
}
xhr.open("GET", "https://api.exmo.me/v1/ticker")
xhr.send()
Последний раз редактировалось provigator, 04.07.2019 в 02:10.
|
|

04.07.2019, 02:38
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
|
|

04.07.2019, 17:13
|
Аспирант
|
|
Регистрация: 20.01.2017
Сообщений: 32
|
|
задача: получить responseText от сервера
URL-адрес запроса: https://api.livecoin.net/exchange/ticker
var xhr = new XMLHttpRequest()
xhr.open("GET", "https://api.livecoin.net/exchange/ticker")
xhr.onreadystatechange = function() {
if(xhr.readyState == 4)
console.log(xhr.responseText)
}
xhr.send()
пробую в разных браузерах:
Edge, Google Chrome - responseText получает пустую строку
при запуске страницы в IE внизу появляется сообщение:
Internet Explorer запретил выполнение сценариев и элементов ActiveX на этой странице.
и кнопка: Разрешить заблокированное содержимое
при нажатии на кнопку скрипт срабатывает и responseText получает текст ответа от сервера
Сообщение от laimas
|
CORS
|
я так понял: сервер https://api.livecoin.net/exchange/ticker разрешает доступ любому домену - Access-Control-Allow-Origin: *
Для инициации Cross-origin запроса браузер клиента добавляет в HTTP запрос Origin (домен сайта, с которого происходит запрос).
вопрос: как правильно указать URL-адрес запроса
|
|

04.07.2019, 17:27
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Наоборот, нет такого разрешения, не отправляет сервер такого заголовка, хотя ответ есть от него, а не получаете вы его потому, что браузер блокирует доступ, по причине отсутствия разрешения. Посмотрите в консоли, и увидите сообщение об этом.
Так как блокирует бразер (это его политика) следовательно и решение проблемы, это "исключить" его из цепочки, заменив посредником - сервером. Это может быть чужой (прокси), но у вас же есть и свой сервер, запрашивайте его, он запросит указанный ресурс и вернет нужное.
|
|

04.07.2019, 19:24
|
Аспирант
|
|
Регистрация: 20.01.2017
Сообщений: 32
|
|
цепочка: клиент - сервер-посредник - data-сервер
клиент: браузер Google Chrome и локальный файл на жд - client.js
сервер-посредник: https://name.com/agent.js
data-сервер: https://api.livecoin.net/exchange/ticker
скрипт на клиенте:
файл client.js
var xhr = new XMLHttpRequest()
xhr.open("GET", "https://name.com/agent.js")
xhr.onreadystatechange = function() {
if(xhr.readyState == 4)
console.log(xhr.responseText)
}
xhr.send()
скрипт на сервере-посреднике https://name.com/agent.js
файл agent.js
var xhr = new XMLHttpRequest()
xhr.open("GET", "https://api.livecoin.net/exchange/ticker")
xhr.onreadystatechange = function() {
if(xhr.readyState == 4)
console.log(xhr.responseText)
}
xhr.send()
что делаю не правильно?
возможно ли сделать запрос на клиенте к agent.js на сервере-посреднике?
или надо использовать запрос к agent.php
Последний раз редактировалось provigator, 04.07.2019 в 22:57.
|
|

05.07.2019, 03:13
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Даже если этот код и выполнится на сервере, то почему вы ожидаете, что ответ магическим способом через консоль сервера попадёт к вам?
Это на самом деле может выглядеть так...
const HTTPS = require("https");
const Express = require("express");
const app = new Express();
app.use(Express.static("./public"));
app.get("/", (request, response) => {
response.redirect("/index.html");
});
app.get("/data.json", (request, response) => {
response.setHeader("Content-Type", "application/json; charset=utf-8");
response.setHeader("Access-Control-Allow-Origin", "*");
const proxyRequest = HTTPS.request("https://api.livecoin.net/exchange/ticker", proxyResponse => {
proxyResponse.pipe(response);
});
proxyRequest.on("error", () => {
response.send("[]");
});
proxyRequest.end();
});
app.listen(3000, () => {
console.log("Server runs at 3000 port");
});
Вы пишите, что client.js у вас локальный файл, в таком случае вы даже можете запустить этот сервер как локальный!
Запрашивая через этот сервер /data.json вы получите данные с https://api.livecoin.net/exchange/ticker
Пример скрипта клиента, в котором скачиваются эти данные и выводятся, например, только названия валют. https://originalinsignificantabstrac...lleys.repl.co/
Полный код... https://repl.it/@Malleys/OriginalIns...antAbstraction можете посмотреть в архиве
Для запуска у вас должен быть установлен node.js
- Распакуйте архив
- Перейдите в терминале в папку
- выполните npm install, чтобы установить зависимости
- выполните npm start, чтобы запустить сервер
В http://localhost:3000/data.json доступны данные, которые вы можете скачивать через xhr или fetch
Последний раз редактировалось Malleys, 05.07.2019 в 03:28.
|
|

07.07.2019, 00:03
|
Аспирант
|
|
Регистрация: 20.01.2017
Сообщений: 32
|
|
windows 10
архив: node-v10.16.0-win-x86.zip
распаковываю в папку e:\nodejs\
в командной строке:
Код:
|
E:\nodejs>npm install
up to date in 0.206s
E:\nodejs>npm start
npm ERR! path E:\nodejs\package.json
npm ERR! code ENOENT
npm ERR! errno -4058
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open 'E:\nodejs\package.json'
npm ERR! enoent This is related to npm not being able to find a file. |
ищу файл package.json:
e:\nodejs\node_modules\npm\package.json
копирую в e:\nodejs\
в командной строке:
Код:
|
E:\nodejs>npm install
npm WARN deprecated fs-access@2.0.0: This package is no longer relevant as Node.js 0.12 is unmaintained.
npm WARN deprecated coffee-script@1.12.7: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm WARN deprecated circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor.
E:\nodejs\parser -> E:\nodejs\node_modules\@babel\parser\bin\babel-parser.js
E:\nodejs\acorn -> E:\nodejs\node_modules\acorn\bin\acorn
.......
.......
.......
.......
> npm@6.9.0 prepare E:\nodejs
> node bin/npm-cli.js rebuild && node bin/npm-cli.js --no-audit --no-timing prune --prefix=. --no-global && rimraf test/*/*/node_modules && make -j4 doc
internal/modules/cjs/loader.js:638
throw err;
^
Error: Cannot find module 'E:\nodejs\bin\npm-cli.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! npm@6.9.0 prepare: `node bin/npm-cli.js rebuild && node bin/npm-cli.js --no-audit --no-timing prune --prefix=. --no-global && rimraf test/*/*/node_modules && make -j4 doc`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the npm@6.9.0 prepare script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above. |
есть ошибки при установке node.js
буду искать инструкции
что посоветуете?
|
|

07.07.2019, 09:27
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от provigator
|
есть ошибки при установке node.js
буду искать инструкции
что посоветуете?
|
Я что-то наверное запутанно написал?
Вот по порядку...
Сообщение от provigator
|
windows 10
архив: node-v10.16.0-win-x86.zip
распаковываю в папку e:\nodejs\
|
Так вы распаковали исходный код node.js, а надо было установить node.js. Установщик node.js для windows 10 https://nodejs.org/dist/v10.16.0/node-v10.16.0-x64.msi
Сообщение от provigator
|
ищу файл package.json:
e:\nodejs\node_modules\npm\package.json
копирую в e:\nodejs\
|
Зачем вы вообще что-то ищете среди исходников node.js? Архив с примером я прикрепил к сообщению!
Вот последовательность действии для запуска сервера...
- Распакуйте архив (имелось в виду с исходным кодом сервера, который я прикрепил к сообщению https://javascript.ru/forum/attachme...bstraction-zip, вы его даже не смотрели)
- Перейдите в терминале в папку
- выполните npm install, чтобы установить зависимости
- выполните npm start, чтобы запустить сервер
Последний раз редактировалось Malleys, 07.07.2019 в 09:33.
|
|

07.07.2019, 17:10
|
Аспирант
|
|
Регистрация: 20.01.2017
Сообщений: 32
|
|
устанавливаю node-v10.16.0-x64.msi
путь e:\nodejs\
распаковываю ваш архив OriginalInsignificantAbstraction.zip
путь e:\OriginalInsignificantAbstraction\
public
package.json
server.js
в терминале:
Код:
|
E:\OriginalInsignificantAbstraction>npm install
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN OriginalInsignificantAbstraction@1.0.0 No description
npm WARN OriginalInsignificantAbstraction@1.0.0 No repository field.
added 50 packages from 37 contributors and audited 126 packages in 3.634s
found 0 vulnerabilities
E:\OriginalInsignificantAbstraction>npm start
> OriginalInsignificantAbstraction@1.0.0 start E:\OriginalInsignificantAbstraction
> node server.js
Server runs at 3000 port |
есть небольшие проблемки:
или для моей задачи это не критично?
Код:
|
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN OriginalInsignificantAbstraction@1.0.0 No description
npm WARN OriginalInsignificantAbstraction@1.0.0 No repository field. |
|
|

07.07.2019, 17:32
|
 |
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от provigator
|
есть небольшие проблемки:
или для моей задачи это не критично?
Код:
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN OriginalInsignificantAbstraction@1.0.0 No description
npm WARN OriginalInsignificantAbstraction@1.0.0 No repository field.
|
Так это не проблемы, это предупреждение, что нет описания и репозитория в файле package.json. Вы можете работать и без них. Или можете добавить описание, если хотите. Это не влияет на работу скрипта!
|
|
|
|