node js:应该用alert来调用函数吗?
问题描述:
我不知道我的代码发生了什么..我有一个Node.js查询路由中的MySQL数据库并显示结果给用户。我的问题是如何在将用户重定向到他们请求的页面之前运行查询并阻止查询? 如果我叫,功能正常运行和快速response..but前添加警报,如果警报关闭该功能不能返回任何值,如冻结功能..node js:应该用alert来调用函数吗?
该用户代码,请求值的NodeJS
function fred(){ //request function from here to fblue
alert('fred called'); //if i disable alert,the function not return any value
get('id', function(datmovMar) {
var obj = JSON.parse(datmovMar);
var items = Object.keys(obj);
var output='';
items.forEach(function(item) {
output+=obj[item].something+'<br/>';
alert(output);
});
});
}
function get(id, callback) {
$.ajax('http://localhost:8000/' + id + '/', {
type: 'GET',
dataType: 'json',
success: function(data) { if (callback) callback(data); },
error : function() { if (callback) callback(null); }
});
}
和验证码定位节点JS
fblue(function(datmovMar){ //call function from here
res.write(JSON.stringify(datmovMar));
res.end('\n');
});
function fblue(callback){
var query = connection.query('SELECT something from table'),
pinMarker = [];
query
.on('error', function(err) {
console.log(err);
updateSockets(err);
})
.on('result', function(user) {
pinMarker.push(user);
})
.on('end',function(){
if(connectionsArray.length) {
jsonStringx = JSON.stringify(pinMarker);
callback(jsonStringx);
}
});
}
我不知道为什么,如果警报关闭该功能着正常运行?
请帮助...
感谢
答
你调用jQuery的$.ajax
方法,这将创建一个异步JavaScript请求到服务器。
这意味着控制流程将在您启动到服务器的呼叫之后继续。
所以你不应该期望从fred()
函数阻塞,直到你的请求已经服务,而是你需要以异步的方式重写你的浏览器端JavaScript代码。
答
jQuery的$ .ajax函数默认是异步运行的。这意味着请求在运行时不会被阻塞,所以后续的代码行将立即执行。对于异步调用,不保证执行顺序。
你可以在这里“欺骗”了一点,如下指定async选项:
$.ajax('http://localhost:8000/' + id + '/', {
type: 'GET',
dataType: 'json',
async: false,
success: function(data) { if (callback) callback(data); },
error : function() { if (callback) callback(null); }
});
这将迫使$就调用不会返回,直到它完成。然而,这不是JavaScript的做事方式,因为你失去了异步执行的效率。正如另一个KARASZI指出的,你应该异步地写这个。
谢谢..我的工作,但有时我再次遇到同样的问题......也许任何其他解决方案? – ltvie 2013-05-15 00:49:41
'var obj = JSON.parse(datmovMar);''你不需要解析结果,因为你已经指定'dataType:'json''。在遵循KARASZI的建议之后,你有什么目标? – 2013-05-15 06:23:23