使用 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' 因此不允许访问。
请执行以下操作:
- 在
client.js
中,在发送之前输出值Idata
(使用console.log
)。
- 使用 Chrome 中的 'Network' 选项卡(或您最喜欢的浏览器中的等效项)检查实际发送的内容。
- 在
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
未提供服务的页面发起的.
我正在使用 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' 因此不允许访问。
请执行以下操作:
- 在
client.js
中,在发送之前输出值Idata
(使用console.log
)。 - 使用 Chrome 中的 'Network' 选项卡(或您最喜欢的浏览器中的等效项)检查实际发送的内容。
- 在
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
未提供服务的页面发起的.