具有Jquery函数的普通函数内的返回值
在Jquery函数内部返回时,返回值不起作用。 当我在Jquery函数外部返回时,它不会正常工作,因为返回不等待Jquery函数,并且未定义错误:uncaughtreferenceerror:result 我怎样才能解决这个问题? Mby我应该让Jquery函数名为count\u,并带有\u min\u max\u val吗具有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,
//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);
});