Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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
Javascript res.send无法正常工作_Javascript_Jquery_Ajax_Node.js - Fatal编程技术网

Javascript res.send无法正常工作

Javascript res.send无法正常工作,javascript,jquery,ajax,node.js,Javascript,Jquery,Ajax,Node.js,我正在使用一个带有jquery ajax和node.js的简单CRUD应用程序,只是为了提高我使用node和ajax的技能。问题是,我正在做一个post请求,该请求由节点服务器中的post路由器处理,一切正常。它在我的products.json文件中又添加了1个产品,但最终它没有将响应发送回客户端,最终的res.send(“done”)不起作用,我也不知道原因 代码如下: ajax $("#create-form").on('submit',function(){ event.preve

我正在使用一个带有jquery ajax和node.js的简单CRUD应用程序,只是为了提高我使用node和ajax的技能。问题是,我正在做一个post请求,该请求由节点服务器中的post路由器处理,一切正常。它在我的products.json文件中又添加了1个产品,但最终它没有将响应发送回客户端,最终的res.send(“done”)不起作用,我也不知道原因

代码如下:

ajax

$("#create-form").on('submit',function(){
    event.preventDefault();
    var createIn = $("#create-input").val();
    $.ajax({
        url: '/products',
        method:'POST',
        data:JSON.stringify({name:createIn}),
        contentType: "application/json",
        dataType: "json",
        success: function(data){
          console.log(data);
          $("create-input").val("");
          $("get-button").click(); 
        }
    });
})
节点

app.post('/products',function(req,res){
    fs.readFile('products.json','utf8',function(err,data){
        var result = JSON.parse(data);
        var productName = req.body.name;
        console.log(req.body.name);
        currentId++;
        var productId = currentId;
        var product = {
            name: productName,
            id: productId
        }
        result.products.push(product);
        fs.writeFile(__dirname + "/products.json",JSON.stringify(result),'utf8');
     });
    res.send("post done");
});

这只是代码的重要部分,它在res.send中工作,但最终失败

这不会直接回答您的问题,但在您知道工作已经完成之前,最好不要发回回复,并且您应该处理错误。换句话说,您应该使用回调。(太多的回调可能会产生问题,您应该研究其他模式-例如承诺-这里没有必要)


您的客户机代码正在寻找json响应,但您正在返回一个字符串

$("#create-form").on('submit',function(){
    event.preventDefault();
    var createIn = $("#create-input").val();
    $.ajax({
        url: '/products',
        method:'POST',
        data:JSON.stringify({name:createIn}),
        contentType: "application/json",
        dataType: "json",           <--------------
        success: function(data){
          console.log(data);
          $("create-input").val("");
          $("get-button").click(); 
        }
    });
})

您使用哪个节点库进行路由?我直接进行,没有路由,因为我不需要它用于这个小应用程序。您的变量是什么?var app=express()的一个实例;尝试在客户端代码上添加错误函数,要查看是否得到响应,这显然是编写routeHandler的更好方法,但我觉得如果他的问题是,
res.send
没有将响应发送回客户端,这不会解决他的问题。您也可以执行
fs.readFileSync
fs.writeFileSync
使其同步,我知道如何处理错误,问题是我没有收到任何错误,我的服务器只是没有响应。@NikhilMotiani我强烈建议不要在服务器中使用
readFile
writeFile
Sync
变体。节点是单线程的,所以同步调用是阻塞的,这意味着当它们执行时,不能执行其他操作。换句话说,在同步调用finish.fs.readFileSync和writeFileSync无法解决我的问题之前,服务器将冻结。我需要知道发生了什么,它会将产品添加到我的product.json,但不会发送回我的ajax请求谢谢你的回答,现在我得到res.send答案,但是,它是否应该继续在成功的ajax上运行,并在成功的基础上运行3行呢?worketd,专注于其他事情,忘记了主要内容,我忘记了2行ofc上的id。它不工作,但在数据类型出现问题之前,非常感谢您的大眼:)
$("#create-form").on('submit',function(){
    event.preventDefault();
    var createIn = $("#create-input").val();
    $.ajax({
        url: '/products',
        method:'POST',
        data:JSON.stringify({name:createIn}),
        contentType: "application/json",
        dataType: "json",           <--------------
        success: function(data){
          console.log(data);
          $("create-input").val("");
          $("get-button").click(); 
        }
    });
})
res.send({"message":"post done"});