jQuery ajax输出作为函数的返回

时间:2010-01-09 13:51:03

标签: php javascript jquery mysql

我创建了一个小的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" });

似乎在已经传递函数时检索数据。有解决方法吗?

3 个答案:

答案 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调用添加一个监听器。