我有一个包含两个文本区域的页面,我想将其中一个数据提交到节点(使用ajax),然后节点执行一些处理,然后返回响应,然后将响应填充到第二个文本区域。
控制台日志显示节点代码工作正常,它到达res.end()但是ajax不断报告Error或TimeoutError,而不是调用成功回调方法。
代码的关键部分是:
前端
<script>
function processClick() {
var data = {};
data.topic = document.getElementById("topic").value;
data.message = document.getElementById("request_area").value;
$.ajax({
url: 'http://localhost:8888/',
dataType:'json',
type: 'POST',
data: JSON.stringify(data),
timeout: 2000,
success: function(data) {
$("#response_area").append(data);
},
error: function(jqXHR, textStatus, errorThrown) {
$("#response_area").append('[Error[textstatus=' + textStatus + ',errorThrown=' + errorThrown + ']]');
}
});
}
</script>
节点
var port = 8888;
var http = require('http');
http.createServer(function (req, res) {
response = null;
console.log('request received');
res.writeHead(200, {'Content-Type': 'application/json'});
res.end('{a:"b"}');
}).listen(port);
console.log("listening on " + port);
我已经删除了大部分节点所做的事情,并试图让它只返回一个json字符串{a:“b”},但这也会导致错误。我搞乱了内容类型吗?会产生多大的影响?
任何帮助将不胜感激。
答案 0 :(得分:1)
您提出请求的方式实际上是跨域请求并违反same origin策略,因此jQuery ajax调用失败。要使此跨域工作,您应该使用基于JSONP的格式。
例如node.js代码:
var port = 8888;
var http = require('http');
http.createServer(function (req, res) {
response = null;
console.log('request received');
res.writeHead(200, {'Content-Type': 'application/json'});
res.end('_testcb(\'{"a": "b"}\')');
}).listen(port);
console.log("listening on " + port);
和客户端javascript应该是这样的
<script>
function processClick() {
var data = {};
data.topic = document.getElementById("topic").value;
data.message = document.getElementById("request_area").value;
$.ajax({
url: 'http://localhost:8888/',
dataType:'jsonp',
type: 'POST',
jsonpCallback: "_testcb",
data: data,
success: function(data) {
$("#response_area").append(data);
},
error: function(jqXHR, textStatus, errorThrown) {
$("#response_area").append('[Error[textstatus=' + textStatus + ',errorThrown=' + errorThrown + ']]');
}
});
}
</script>
在同一个域内执行此操作的最佳方法是使用express。如果您必须在纯nodejs中执行此操作而不使用快速框架,那么您可以查看以下链接。
https://stackoverflow.com/a/6012543/517525
这也为您提供了有关查询的详细说明。
答案 1 :(得分:0)
您的JSON字符串无效。需要引用密钥:
{"a":"b"}
或者:
JSON.stringify({a: 'b'})