Ajax jquery异步返回值

时间:2010-12-29 14:47:14

标签: jquery ajax asynchronous return

如何让此代码返回值而不冻结浏览器 你当然可以用新方法重写它。

function get_char_val(merk)
{  
    var returnValue = null;
    $.ajax({   
                type:       "POST",
                async:      false,   
                url:            "char_info2.php",   
                data:   { name: merk },   
                dataType: "html",  
                success:    function(data)
                                    {
                                        returnValue = data;
                                    } 
        }); 
    return returnValue;
}
var px= get_char_val('x');
var py= get_char_val('y');

编辑: 我需要在其他时间从php文件中获取至少20个变量。

3 个答案:

答案 0 :(得分:14)

这是不可能的。
Javascript在UI线程上运行;如果您的代码等待服务器回复,则浏览器必须保持冻结状态。

相反,您需要使用回调函数返回值:

function get_char_val(merk, callback)
{  
    var returnValue = null;
    $.ajax({   
                type:       "POST",
                url:            "char_info2.php",   
                data:   { name: merk },   
                dataType: "html",  
                success:    function(data) {
                    callback(data);
                } 
        }); 
}

get_char_val('x', function(px) { ... });
get_char_val('y', function(py) { ... });

请注意,这两个回调将以不可预测的顺序运行。


您应该修改您的设计,以便在一个AJAX请求中获得所有二十个值 例如,您可以使用逗号分隔的值列表,并返回{ x: "...", y: "..." }之类的JSON对象。

答案 1 :(得分:1)

您不能以这种方式进行变量赋值(异步)。您必须在success处理程序中设置变量。

variableArray = new Array(); 

get_char_val('x');
get_char_val('y');

function get_char_val(merk)
{  
    var returnValue = null;
    $.ajax({   
        type:       "POST",
        url:            "char_info2.php",   
        data:   { name: merk },   
        dataType: "html",  
        success:    function(data)
            {
                variableArray[merk] = data;
            } 
    }); 
}

完成所有检索后,您可以使用variableArray[x]variableArray[y]

访问x和y变量

答案 2 :(得分:0)

这可能不是您所期望的,但您可以设置async:如果您不想在浏览器中暂停,那么是true,那么您希望在成功时使用px