Jquery response.end()不';在节点操作后,t似乎正在启动
我有一个包含两个文本区域的页面,我想将其中一个区域的数据提交给node(使用ajax),node然后进行一些处理,然后返回响应,然后将其填充到第二个文本区域 控制台日志显示节点代码在res.end()上运行良好,但ajax会不断报告错误或TimeoutError,而不是调用成功回调方法 守则的主要部分包括: 前端Jquery response.end()不';在节点操作后,t似乎正在启动,jquery,ajax,node.js,Jquery,Ajax,Node.js,我有一个包含两个文本区域的页面,我想将其中一个区域的数据提交给node(使用ajax),node然后进行一些处理,然后返回响应,然后将其填充到第二个文本区域 控制台日志显示节点代码在res.end()上运行良好,但ajax会不断报告错误或TimeoutError,而不是调用成功回调方法 守则的主要部分包括: 前端 <script> function processClick() { var data = {}; data.topi
<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>
我已经剥离了node的大部分功能,并试图让它只返回一个json字符串{a:“b”},但这也会导致错误。我把内容类型搞砸了吗?这会产生多大的影响
任何帮助都将不胜感激 您的JSON字符串无效。需要引用关键点:
{"a":"b"}
或:
您发出请求的方式实际上是跨域请求,并且违反了策略,因此jQueryAjax调用失败。要跨域获得此工作,应使用基于的格式 例如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>
函数processClick(){
变量数据={};
data.topic=document.getElementById(“topic”).value;
data.message=document.getElementById(“请求区域”).value;
$.ajax({
网址:'http://localhost:8888/',
数据类型:'jsonp',
键入:“POST”,
jsonpCallback:“_testcb”,
数据:数据,
成功:功能(数据){
$(“#响应区”)。追加(数据);
},
错误:函数(jqXHR、textStatus、errorshown){
$(“#响应区”).append('[Error[textstatus='+textstatus+',errorshown='+errorshown+']');
}
});
}
在同一域中执行此操作的最佳方法是使用。如果您必须在纯nodejs中执行此操作而不使用expressframework,那么您可以查看下面的链接
这也为您提供了查询的详细解释。JSON属性必须用引号括起来。尝试
res.end('{“a”:“b”}')代码>。实际上,尝试JSON.stringify({a:b})代码>,这确实是生成JSON对象的方法。感谢您的更正,但不幸的是,它会导致相同的错误。如果您只是在浏览器中访问页面,会发生什么情况?您收到了什么错误?进行了此更正,如上所述,它会导致相同的错误。@Kash:什么错误?另外,您没有发送跨来源请求,是吗?谢谢,谢谢。当Blender提到跨源请求时,我查阅了它,修改了我的代码,正要修改修改版本,这时我看到了你的帖子:它几乎是一面镜子。谢谢你的帮助和解释。
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);
<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>