使用 javascript http 发送和接收数据

Sending and receiving data using javascript http

我正在使用 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' header is present on the requested resource. Origin 'http://localhost' 因此不允许访问。

请执行以下操作:

  1. client.js中,在发送之前输出值Idata(使用console.log)。
  2. 使用 Chrome 中的 'Network' 选项卡(或您最喜欢的浏览器中的等效项)检查实际发送的内容。
  3. server.js中,收到后立即输出值data(使用console.log)。

这可能会为您提供有关问题出在哪里的线索,这将帮助您确定下一步的行动方案。如果您仍然不知道如何继续,请更新问题,我会更新我的答案。

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

主要问题是您提出了 "GET" 请求。无法使用 XMLHttpRequest "GET" 请求上传数据 payload/HTTP 请求 body。见specification of XMLHttpRequest:"If stored method is GET act as if the data argument is null."

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

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

回应更新的问题:

出于安全原因,您的 AJAX 请求将不允许访问您在 localhost:3000 托管的服务器,除非 AJAX 请求是从 [=15= 提供的页面发起的] ] 或者你告诉你的服务器允许 "cross-origin" 请求。后者可以通过向您的服务器添加这样一行来完成:

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

这会设置一个 header,告诉浏览器允许 AJAX 向 localhost:3000 发出请求,即使请求是从 localhost:3000 未提供服务的页面发起的.