我创建了一个小的php脚本,它根据给定的post / get参数返回mysql结果。使用此文件,我现在可以使用jquery.post或.get命令从我的数据库中检索某些内容。
脚本始终返回1个值。所以我尝试创建一个javascript函数,从数据库中返回检索到的值。
这就是我想要做的事情,但我不应该这样做:
function mysql(args) {
$.post("scripts/ajax_mysql.php",args,function(data) {
return data;
});
}
var value=mysql({ table:"user", where:"nickname='test'", get:"email" });
似乎在已经传递函数时检索数据。有解决方法吗?
答案 0 :(得分:2)
抛开让用户基本上创建任何类型的SQL命令并将其发送到您的服务器的问题 - 一个带有可怕安全隐患的可怕想法,您的脚本问题是无法理解AJAX的本质。 / p>
AJAX调用是异步的,因此您的方法在AJAX调用完成之前返回。你有两种方法可以解决这个问题。传递回函数,并在AJAX帖子完成后执行回调。这保持了请求的异步性质。或者,您可以使用完整的$ .ajax()语法来执行帖子并将async
参数设置为true。然后,您可以将AJAX请求的结果存储在作用于函数外部块的变量中,并在函数末尾返回它。将async
设置为true基本上可以解决使用回调的问题,除了jQuery处理它之外。
function mysql(data, callback) {
$.post( "scripts/ajax_mysql.php",args,function(data) {
if (callback) {
callback(data);
}
});
}
mysql({ table:"user", where:"nickname='test'", get:"email" }, function(user) {
$('#email').val(user.email);
...
});
或
function mysql(data, callback) {
var value;
$.ajax({
url: "scripts/ajax_mysql.php",
type: 'post',
async: false,
data: args,
success: function(data) {
value = data;
}
});
return value;
}
使用您现有的调用语义。
答案 1 :(得分:1)
Ajax是异步的。调用该函数会触发一个请求,然后程序继续。
当请求返回时,事件触发,附加的事件处理程序处理数据。
您可以使用XHR进行同步,但不建议这样做。
设计程序以处理回调中检索到的数据,而不是返回变量。
答案 2 :(得分:0)
问题是return data
语句不会导致mysql函数中的“返回”。
我要做的是从mysql函数返回$.post
调用返回的XMLHTTPRequest对象,然后为成功的ajax调用添加一个监听器。