【问题标题】:Node js send JSON to jquery I don't understand why it cannotNode js将JSON发送到jquery我不明白为什么它不能
【发布时间】:2018-09-14 12:09:34
【问题描述】:
Server site:
var express = require('express');
var bodyParser = require('body-parser');
var app     = express();
app.use(express.json());  
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/testJson', function (req, res) {
   res.sendFile("/my_project/testJson"+ "/" + "testJson.html" );
})

app.post('/myaction', async function(req, res) {
   var st = req.body.status; 

   res.status(200);
   res.setHeader('Content-Type', 'application/json');
   res.send(JSON.stringify({ status: st }));
});
app.listen(8081, function() {
   console.log('Server running at http://127.0.0.1:8081/');
});

Client site
$.fn.ajaxShow = function(st) {
   xhrct =  $.ajax({
                    type: 'POST',
                    dataType: "json",
                    data : {  status : st   },
                    url: 'http://127.0.0.1:8081/myaction',                      
                    success: function (data) {
                               if(data!=null) {
                                 var fotoData = $.parseJSON(data);
                                  $(fotoData).each(function (i, obx) {
                                        alert(obx.status);
                                    });
                                }       
                             },
                    error: function(XMLHttpRequest, textStatus, errorThrown) 
                     {
                         alert("XMLHttpRequest: 
                              "+XMLHttpRequest.responseText);
                         alert("textStatus: "+textStatus);
                         alert("errorThrown: "+errorThrown);
                     }
                });
  }

我想将JSON 的数据从node js 发送到jquery,但出现了一些错误。它提醒XMLHttpRequest.responseText 为空,textStatus 为“错误”,errorThrown 为空。在服务器上,我尝试res.setHeader('Content-Type', 'application/json')res.send(JSON.stringify({ status: st })),但它不起作用。我做错了什么?

我希望有人帮助我。

【问题讨论】:

  • 可以试试app.use(bodyParser.json())吗?

标签: javascript jquery node.js


【解决方案1】:

试试下面的代码

服务器端

var express = require('express');
var bodyParser = require('body-parser');
var app     = express();
app.use(express.json());  
app.use(bodyParser.urlencoded({ extended: false }));

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.post('/myaction', async function(req, res) {
   var st = req.body.status; 
   res.status(200);
   res.setHeader('Content-Type', 'application/json');
   res.send({ status: st });
});

app.listen(8081, function() {
   console.log('Server running at http://127.0.0.1:8081/');
});

客户端

    function test(st){
        var reqData = {status:st};
        $.post("http://localhost:8081/myaction",reqData,function( data ) {
          console.log(data);
          alert(data.status);
        })
    }

【讨论】:

  • 添加“Access-Control-Allow-Origin”会有什么帮助?
  • 对主要问题没有帮助,当您单独运行客户端和服务器代码(不同来源)时会有所帮助
【解决方案2】:

你得到什么错误?你能检查你的浏览器控制台是否有错误吗?

我试过你的代码,它几乎可以工作。在客户端,我称之为:

$('body').ajaxShow('HELLO'); 

它会抛出一个错误:“...意外的标记 o”。为避免这种情况,请将 var fotoData = $.parseJSON(data); 替换为 var fotoData = data;,因为您已经从服务器获取 JSON。之后浏览器提示“HELLO”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 2017-12-23
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多