使用javascript http发送和接收数据

时间:2015-12-18 09:35:43

标签: javascript ajax node.js xmlhttprequest

我使用XMLHttpRequest从javascript发送json格式的数据,并在node.js文件中接收数据,如下所示

client.js

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

server.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的值,但是客户端浏览器显示错误:

XMLHttpRequest无法加载http://localhost:3000/。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost'因此不允许访问。

2 个答案:

答案 0 :(得分:0)

请执行以下操作:

  1. client.js中,在发送之前输出值Idata(使用console.log)。
  2. 使用Chrome中的“网络”标签(或您喜欢的浏览器中的等效标签)来检查实际发送的内容。
  3. server.js中,在收到后立即输出值data(使用console.log)。
  4. 这可能会让您了解它出错的地方,这将有助于您确定下一步行动。如果您仍然不知道如何继续,请更新问题,我将更新我的答案。

    根据我对node.js的了解(非常缺乏),我现在可以说的是,如果变量data被视为对象,store += data;不是一个好主意,因为这意味着你试图将一个对象添加到(空)字符串。 (可能导致对象返回“[object Object]”或某些此类)

答案 1 :(得分:0)

主要问题是您正在发出"GET"请求。无法使用XMLHttpRequest "GET"请求上载数据有效内容/ HTTP请求正文。请参阅specification of XMLHttpRequest:"如果存储方法是GET,则表明数据参数为空。"

为了发送数据,您应该发出"POST"请求,在这种情况下:

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

回应更新的问题:

出于安全原因,您的AJAX请求将不被允许访问localhost:3000托管的服务器,除非AJAX请求是从localhost:3000提供的页面启动的,或者您告诉您的服务器允许&# 34;跨来源"要求。后者可以通过向您的服务器添加这样的行来完成:

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

这设置了一个标题,告诉浏览器允许AJAX请求localhost:3000,即使请求是从localhost:3000未提供的页面发起的。