2015-12-18 2 views
0

Я посылаю данные в формате JSON с использованием JavaScript XMLHttpRequest и приема данных на Node.js файл следующим образомПередача и прием данных с помощью яваскрипта HTTP

client.js

$.ajax({ 
    type: "POST", 
    dataType: 'json', 
    data: JSON.stringify(Idata), 
    url: AjaxURL, 
    success: function (result) { 
     return true; 
    } 
}); 

сервер. JS

var http = require('http'); 

console.log("server initialized"); 

var server = http.createServer(function (req, response) { 
    req.on('data', function (data) { 

     var d = JSON.parse(data); 
     console.log("data : " + d.OperationType); 

    }); 
    req.on('end', function() { 
     response.end(); 
    }); 

}).listen(3000); 

Теперь я успешно получил значение operationtype но при Clie nt Эта ошибка показывает:

XMLHttpRequest не может загрузить http://localhost:3000/. В запрошенном ресурсе нет заголовка «Access-Control-Allow-Origin». Происхождение 'http://localhost', следовательно, не допускается.

+0

Идата, которую я отправляю от клиента, выглядит следующим образом: var Idata = {'OperationType': 'GID', 'DNS': '' + objName + '', 'fn': 'SetGUID'}; – himesh

ответ

0

Основная проблема заключается в том, что вы делаете запрос "GET". Тело загрузки данных/HTTP-запроса не может быть загружено с помощью запроса XMLHttpRequest "GET". См. specification of XMLHttpRequest: «Если хранимый метод GET действует так, как если бы аргумент данных был равен нулю».

Для того, чтобы отправить данные, вы должны сделать "POST" запрос, в данном случае:

xmlhttp.open("POST", AjaxURL, true); 

В ответ на обновленный вопрос:

По соображениям безопасности, ваш запрос AJAX не будет разрешено обратитесь к серверу, размещенному по адресу localhost:3000, если запрос AJAX не инициирован с страницы, обслуживаемой localhost:3000. Или вы сообщаете серверу, чтобы разрешать запросы «перекрестного происхождения». Последнее может быть достигнуто путем добавления строки, как это на ваш сервер:

response.setHeader("Access-Control-Allow-Origin", "*"); 

Это устанавливает заголовок, который сообщает браузеру, чтобы разрешить AJAX запросы localhost:3000 даже если запрос начинается со страницы, которая не обслуживается localhost:3000.

+0

Спасибо. почта работает хорошо, но ошибка теперь отображается в браузере клиента, о котором я упоминал в моем обновленном вопросе – himesh

+0

Я обновил свой ответ. Если у вас возникнут дополнительные вопросы, вы должны создать новый вопрос вместо того, чтобы его изменять. Существенное изменение вашего предыдущего вопроса затрудняет для других возможность следить за обсуждением и извлекать из него пользу. –

+0

Спасибо, Дэвид, теперь он работает хорошо. Этот ответ облегчил мою работу, еще раз спасибо – himesh

0

Пожалуйста, сделайте следующее:

  1. В client.js, вывести значение Idata (используя console.log) перед его отправкой.
  2. Используйте вкладку «Сеть» в Chrome (или ее эквивалент в вашем любимом браузере), чтобы проверить, что на самом деле отправляется.
  3. В server.js выведите значение data (используя console.log) сразу после его получения.

Это, вероятно, даст вам представление о том, где оно пошло не так, что поможет вам определить ваш следующий курс действий. Если вы все еще не знаете, как продолжить, обновите вопрос, и я обновлю свой ответ.

Что я могу сказать прямо сейчас основана на моей (очень не хватает) знание Node.js, что если переменная data в настоящее время рассматривается как объект, store += data; не является хорошей идеей, поскольку это будет означать, что вы пытаетесь для добавления объекта в (пустую) строку. (Возможно, это приводит к возврату объекта «Объект объекта» или какой-либо такой)

+0

Idata имеет значение [объект объекта] как на стороне клиента, так и на стороне сервера – himesh

Смежные вопросы