express中ajax请求第一次undefined后续均成功,但结果是上一次的结果而非该次请求的结果

刚开始用node+express,使用了静态页面请求ajax出现问题,目前结果来看是:
1.第一次请求不进入success,打印undefined;
2.第二次请求开始,进入success,打印第一次请求结果;
3.第三次请求打印第二次请求结果,但查看后台传输值发现,传输过去的值没有问题,接收的值出现问题

请教这个问题怎么解决?

app.js代码是:

var mysql = require('mysql');
var express = require('express');
var app = express();
var settings = require('./build/db');
app.use(express.static('./src'));
//连接数据库
var connection = mysql.createConnection(settings.db);
connection.connect(function(err){
    if(err){
        console.log('[query] - :'+err);
    }else{
        console.log('[connection connect]  succeed!');
    }
   
});
//查询
var arr=[];
    //把搜索值输出
app.get('/getname', function(req, res) {
    var selectSQL = 'select linkname from `mkln_server_contract`';
    connection.query(selectSQL, function(err, rows) {
        if (err) throw error;
        for (var i = 0; i < rows.length; i++) {
            arr[i] = rows[i].linkname;
        }
        console.log(arr[1]);
        
    });
    res.send(arr);
});

app.post('/getid', function(req, res) {
    var selectSQL = 'select id from `mkln_server_contract`';
    connection.query(selectSQL, function(err, rows) {
         if (err) throw error;
        for (var i = 0; i < rows.length; i++) {
            arr[i] = rows[i].id;
        }
        console.log(arr[1]);
    });
    res.send(arr);
});
//关闭连接
//connection.end();
app.listen(3000);

html

    <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Page Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="js/jquery-1.12.0.js"></script>
    <script src="js/index.js"></script>
    <style>
        #uid{
            margin-left:40px;
        }
    </style>
    </head>
    <body>
    <button id="name">获取联系人</button>
    <button id="uid">获取ID</button>  
    </body>

js

$(function() {
  $("#name").click(function() {
    $.ajax({
      type: "GET",
      url: "getname",
      success: function(data) {
        console.log(data[1]);
      },
      error : function (err) {
        console.log("error : " + err);
    }
    });
  });
  $("#uid").click(function() {
    $.ajax({
        type: "POST",
        url: "getid",
        success: function(data) {
          console.log(data[1]);
        },
        error : function (err) {
          console.log("error : " + err);
        }
      });
  });
});
阅读 2.5k
2 个回答

已解决,将 res.send(arr) 放到 connection.query()中即可避免。
出现的原因 应当 是 该查询是异步执行,第一次res.send时,arr值未更改。
不过这个依次延续的原因,不是很懂。

不过这个依次延续的原因,不是很懂。

arr是一个全局变量,第一次你同步返回,arr为空,但返回后query继续执行,往arr添加数据。这就是依次延续的原因。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题