Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery response.end()不';在节点操作后,t似乎正在启动_Jquery_Ajax_Node.js - Fatal编程技术网

Jquery response.end()不';在节点操作后,t似乎正在启动

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

我有一个包含两个文本区域的页面,我想将其中一个区域的数据提交给node(使用ajax),node然后进行一些处理,然后返回响应,然后将其填充到第二个文本区域

控制台日志显示节点代码在res.end()上运行良好,但ajax会不断报告错误或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>
我已经剥离了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>