Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2013, 01:39
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Отправка запроса nodejs
Запустил node.js, прочитал статью , сделал пример и снова облом)
<!DOCTYPE HTML>
<html>
<head><meta charset="utf-8"></head>
<body>

<button onclick="vote(this)">Голосовать!</button>

<script>
function vote(outputElem) {
  var xhr = new XMLHttpRequest(); 

  xhr.open('GET', 'http://127.0.0.1:8080/index.js', true); 

  xhr.onreadystatechange = function() {  
    if (xhr.readyState != 4) return; 

    if (xhr.status != 200) {
      // обработать ошибку
      alert('Ошибка ' + xhr.status + ': ' + xhr.statusText);
      return; 
    } 

    // обработать результат
    outputElem.innerHTML = xhr.responseText; 
  }

  xhr.send(null); 
}

</script>


</body>
</html>

код index.js
var http = require('http');
var static = require('node-static');
var file = new static.Server('.');

http.createServer(function (req, res) {

	if (req.url == '/vote') {
		res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});

		var now = new Date();
		var timeStr = now.getHours()+':'+now.getMinutes()+':'+now.getSeconds();

		res.end('Голос принят ' + timeStr);
		return;
	}

	file.serve(req, res);
   

}).listen(8080);

пробывал вместо
xhr.open('GET', 'http://127.0.0.1:8080/index.js', true);

писать (файлы в одной папке)
xhr.open('GET', 'index.js', true);

но все равно не работает .
в консоле
Цитата:
XMLHttpRequest cannot load http://127.0.0.1:8080/index.js. Origin null is not allowed by Access-Control-Allow-Origin.
или
Цитата:
XMLHttpRequest cannot load file:///C:/nodeJSProjects/test/index.js. Cross origin requests are only supported for HTTP.
почему не может загрузить файл?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2013, 04:06
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

хм, вроде работает если открывать index файл так http://127.0.0.1:8080/index.html
но теперь вместо содержимого timeStr возвращает код файл index.js)
И еще не могу понять почему когда меняю кол файл index.js загружается , если бы он просто кешировался браузером то он бы не был одинаковый во всех браузерах...
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.

Последний раз редактировалось cyber, 13.05.2013 в 04:31.
Ответить с цитированием
  #3 (permalink)  
Старый 13.05.2013, 05:44
Аватар для tropiko
Аспирант
Отправить личное сообщение для tropiko Посмотреть профиль Найти все сообщения от tropiko
 
Регистрация: 23.06.2011
Сообщений: 44

Код:
http://127.0.0.1:8080/index.js
Не надо /index.js. Просто к адресу (ну или адресу с портом, в данном случае):
Код:
http://127.0.0.1:8080/
Обращение же идет к серверу, запущенному на неком порту.

И да, js-файлы бэкенда не надо располагать в document_root виртуального хоста
Ответить с цитированием
  #4 (permalink)  
Старый 13.05.2013, 09:41
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

tropiko,
я пробывал и так
xhr.open('GET', 'index.js', true);

но не работает
Цитата:
XMLHttpRequest cannot load file:///C:/nodeJSProjects/test/index.js. Cross origin requests are only supported for HTTP. index.html:1
Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #5 (permalink)  
Старый 13.05.2013, 10:14
Аватар для tropiko
Аспирант
Отправить личное сообщение для tropiko Посмотреть профиль Найти все сообщения от tropiko
 
Регистрация: 23.06.2011
Сообщений: 44

cyber, зачем вы упорно обращаетесь к файлу? По аналогии с PHP
тут не получится

Надо с начала.
Создаем файл "server.js"
var http = require('http');

http.createServer(function (req, res){
	if(req.url == '/vote'){
		res.writeHead(200, {'Content-Type': 'text/plain;'});
		var now = new Date();
		var timeStr = now.getHours() + ':' + now.getMinutes() + ':'+now.getSeconds();
		
		res.end('Голос принят: ' + timeStr);
	}
	else{
		res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
		res.end('Hello World!');
	}
}).listen(8080, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8080/');


Сохраняем. В директории с "server.js" к консоли (в случае винды -- cmd.exe)
Код:
node server.js
Заходим браузером по адресу : http://127.0.0.1:8080/
Далее, надеюсь, все понятно станет.
Ответить с цитированием
  #6 (permalink)  
Старый 13.05.2013, 13:51
Аватар для simple
Профессор
Отправить личное сообщение для simple Посмотреть профиль Найти все сообщения от simple
 
Регистрация: 23.09.2010
Сообщений: 247

да роутер для сервера в ноде надо самому писать или использовать express
__________________
На начальном этапе события могут казаться случайными, но постепенно проявляется связь, и в конце концов все части целого складываются
Ответить с цитированием
  #7 (permalink)  
Старый 13.05.2013, 16:00
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

tropiko, это все понятно, я так и делал, кроме того зачем использовать if(req.url == '/vote')
когда я перехожу по http://127.0.0.1:8080/ я вижу "Hello world" но когда я передаю в скрипт тот же http://127.0.0.1:8080/ получаю ошибку.
сори что туплю...
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #8 (permalink)  
Старый 13.05.2013, 16:30
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

хм,
добавил console.log
http.createServer(function (req, res){
	console.log("1");// тут
	if(req.url == '/vote'){
		res.writeHead(200, {'Content-Type': 'text/plain;'});
		var now = new Date();
		var timeStr = now.getHours() + ':' + now.getMinutes() + ':'+now.getSeconds();
		
		res.end('Голос принят: ' + timeStr);
	}
	else{
		res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
		res.end('Hello World!');
	}
}).listen(8080, '127.0.0.1');

и при нажатие на кнопку в консоль выводит 1 , значит запрос все таки отправляется, но ошиба все равно осталась
Цитата:
XMLHttpRequest cannot load http://127.0.0.1:8080/. Origin null is not allowed by Access-Control-Allow-Origin.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #9 (permalink)  
Старый 13.05.2013, 16:38
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

добавил заголовок в файл server.js
res.header("Access-Control-Allow-Origin", "*");

получил такую ошибку
GET [url]http://127.0.0.1:8080/[/url]

и начал падать node js)
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.

Последний раз редактировалось cyber, 13.05.2013 в 16:41.
Ответить с цитированием
  #10 (permalink)  
Старый 13.05.2013, 17:01
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Все решил, проблема была не в настройке node js , а в том что нужно было правильно добавить заголовок
res.writeHead(200, {
			'Content-Type': 'text/plain;',
			 "Access-Control-Allow-Origin":"*" 
			});
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery ajax отправка запроса в htpps vova_b jQuery 19 07.03.2013 18:20
Отправка запроса ajax Jack Sparrow AJAX и COMET 1 24.11.2012 13:29
Фоновая отправка запроса bugiman AJAX и COMET 1 07.11.2012 17:04
Отправка запроса с одного на другой сайт makar3000 Общие вопросы Javascript 6 21.12.2011 23:50
Отправка запроса kalisha AJAX и COMET 0 02.10.2009 16:51