具有Jquery函数的普通函数内的返回值

具有Jquery函数的普通函数内的返回值,jquery,Jquery,在Jquery函数内部返回时,返回值不起作用。 当我在Jquery函数外部返回时,它不会正常工作,因为返回不等待Jquery函数,并且未定义错误:uncaughtreferenceerror:result 我怎样才能解决这个问题? Mby我应该让Jquery函数名为count\u,并带有\u min\u max\u val吗 //counting precentage function function count_with_min_max_val(val, perc, min_val,

在Jquery函数内部返回时,返回值不起作用。 当我在Jquery函数外部返回时,它不会正常工作,因为返回不等待Jquery函数,并且未定义错误:uncaughtreferenceerror:result

我怎样才能解决这个问题? Mby我应该让Jquery函数名为count\u,并带有\u min\u max\u val吗

//counting precentage function   
function count_with_min_max_val(val, perc, min_val, min_val_limit, max_val, max_val_limit, action) {
    //ajax data
    var json_obj = {};
    json_obj.values = {
        "action": action,
            "value": val,
            "percent": perc,
            "min_val": min_val,
            "min_val_limit": min_val_limit,
            "max_val": max_val,
            "max_val_limit": max_val_limit

    };
    var json_obj = JSON.stringify(json_obj);

    $.post("pages/calc/calculator.php", {
        json_a: json_obj
    }).done(function (data) {
        result = data;
        alert(result); //that works
        return result; //doesn't return to main function                     
    });
    return result; //return doesnt wait for Jquery function to complete, and showing error
}

试试这样的

    $.ajax({
        type: "POST",
        url: "pages/calc/calculator.php",
        async: false,
        data: { json_a: json_obj }
        })
        .done(function( msg ) {
            result = data;
            alert(result); //that works
            return result; //doesn't return to main function     
        });
默认情况下,所有请求都是异步发送的(即,默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和数据类型:“jsonp”请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作


Ajax调用是异步的。添加
async:false

$.ajax({
    type: "POST",
    url: "pages/calc/calculator.php",
    async: false,
    data: {
        json_a: json_obj
    },
    success: function(data){
        result = data;
        return result;
    }
});
正如注释中指出的,异步已被弃用。下面是如何使用ajax回调实现这一点

var result;
function ajaxCallback(response){
    result = response;
    console.log(response);
}

function count_with_min_max_val(val, perc, min_val, min_val_limit, max_val, max_val_limit, action){
    //ajax data
    var json_obj = {};
    json_obj.values = {
        "action": action,
        "value": val,
        "percent": perc,
        "min_val": min_val,
        "min_val_limit": min_val_limit,
        "max_val": max_val,
        "max_val_limit": max_val_limit
    };
    json_obj = JSON.stringify(json_obj);

    $.post("pages/calc/calculator.php", {
        json_a: json_obj
    }).done(ajaxCallback);
}

这是不可能的,因为它是一个异步调用。因此,done()中的函数是在post完成之后,在主函数返回之前执行的

一种可能的解决方案是将回调函数作为参数传递。例如:

// Do something with result
function callback(result) {
alert(result);
}

function count_with_min_max_val(callback, val, perc, min_val, min_val_limit, max_val, max_val_limit, action) {
    //ajax data
    var json_obj = {};
    json_obj.values = {
        "action": action,
            "value": val,
            "percent": perc,
            "min_val": min_val,
            "min_val_limit": min_val_limit,
            "max_val": max_val,
            "max_val_limit": max_val_limit

    };
    var json_obj = JSON.stringify(json_obj);

    $.post("pages/calc/calculator.php", {
        json_a: json_obj
    }).done(function (data) {
        result = data;
        callback(result);
    });
}

非常感谢您的回答。 根据您的评论,同步调用已经过时,而且很危险,因为它们可以锁定webbrowser。我决定在ajax调用完成后使用函数回调

(我的代码) (……)

(……)


非常感谢,你们是专家

return语句在ajax中不起作用。你到底想在这里实现什么?可能您可以将结果分配给隐藏变量?可能的重复项您可以将一些函数传递给
count\u,并使用\u min\u max\u val
作为参数,然后在ajax回调中执行此函数。由于
jquery1.8
@u mulder,该函数已被弃用。我已更新了答案,以包括
async:false
和回调。谢谢
$.post("pages/calc/calculator.php", {
   json_a: json_obj
}).done(function (data) {

   callback_function(data);

});