刚开始用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);
}
});
});
});
已解决,将
res.send(arr)
放到connection.query()
中即可避免。出现的原因 应当 是 该查询是异步执行,第一次
res.send
时,arr
值未更改。不过这个依次延续的原因,不是很懂。