Javascript 保存来自jqueryajax函数的响应
我有一个自定义函数,它调用ajax请求,我能够将响应数据保存到变量并返回它0始终返回,但警报显示如3712 以下是函数:Javascript 保存来自jqueryajax函数的响应,javascript,ajax,jquery,Javascript,Ajax,Jquery,我有一个自定义函数,它调用ajax请求,我能够将响应数据保存到变量并返回它0始终返回,但警报显示如3712 以下是函数: function getNo(index, val) { var $ret = 0; $('body').showLoading(); $.ajax({ type: 'POST', url: BASE_URL + 'tools/no.php?id='+index+'&value='+val, data: $("#form").seriali
function getNo(index, val) {
var $ret = 0;
$('body').showLoading();
$.ajax({
type: 'POST',
url: BASE_URL + 'tools/no.php?id='+index+'&value='+val,
data: $("#form").serialize(),
cache: false,
success: function(data) {
$('body').hideLoading();
alert('data: ' + data);
$ret = data;
}
});
return $ret;
}
因为
ajax
是异步的,当返回$ret时执行代码>时,响应尚未就绪,因此返回其初始值0
您必须在success
回调函数中执行您想要执行的操作,而不是返回。因为ajax
是异步的,当返回$ret执行代码>时,响应尚未就绪,因此返回其初始值0
您必须在success
回调函数中执行您想要执行的操作,而不是返回。由于异步调用,这将返回零。相反,我建议您传递一个回调方法来处理响应
请参见下面的示例:
function getNo(index, val, callback) {
var $ret = 0;
$('body').showLoading();
$.ajax({
type: 'POST',
url: BASE_URL + 'tools/no.php?id=' + index + '&value=' + val,
data: $("#form").serialize(),
cache: false,
success: function (data) {
$('body').hideLoading();
callback(data);
}
});
return $ret;
}
//USAGE
getNo(3, "value", function (data) {
//do something with data responded from the server
alert(data);
});
由于异步调用,这将返回0。相反,我建议您传递一个回调方法来处理响应
请参见下面的示例:
function getNo(index, val, callback) {
var $ret = 0;
$('body').showLoading();
$.ajax({
type: 'POST',
url: BASE_URL + 'tools/no.php?id=' + index + '&value=' + val,
data: $("#form").serialize(),
cache: false,
success: function (data) {
$('body').hideLoading();
callback(data);
}
});
return $ret;
}
//USAGE
getNo(3, "value", function (data) {
//do something with data responded from the server
alert(data);
});
因为Ajax中的“A”代表异步,返回$ret代码>在Ajax调用找到返回成功函数的方法之前执行
与其尝试返回值,不如尝试在ajax成功块中调用函数
success: function(data) {
$('body').hideLoading();
alert('data: ' + data);
$ret = data;
doSomething(data);
}
因为Ajax中的“A”代表异步,返回$ret代码>在Ajax调用找到返回成功函数的方法之前执行
与其尝试返回值,不如尝试在ajax成功块中调用函数
success: function(data) {
$('body').hideLoading();
alert('data: ' + data);
$ret = data;
doSomething(data);
}
如果确实需要,您可以关闭异步请求:,查找设置“async”。async:false
通常会将浏览器挂起,直到服务器启动response@row1:Synchronous,我想是“JAX”,请求通常不是一个好主意。不鼓励使用同步请求,因为它会阻止网页中的所有内容,而且用户觉得它被冻结了,这可能会导致应用程序关闭。使用时要格外小心,或者最好不要使用。@FelixKling肯定这通常不是个好主意。但是,如果您的服务保证在少量毫秒内返回,那么沿着过程性更强的路径运行可能会很有用(更简单)。如果您确实需要,可以关闭异步请求:,请查找设置“async”。async:false
通常会将浏览器挂起,直到服务器运行response@row1:同步,我认为“JAX”,请求通常不是一个好主意。不鼓励使用同步请求,因为它会阻止网页中的所有内容,用户觉得它被冻结了,这可能会导致应用程序关闭。使用时要格外小心,或者最好不要使用。@FelixKling肯定这通常不是个好主意。但是如果你的服务保证在一小段毫秒内返回,那么它可能会更有用(更简单)沿着更程序化的路径。可能重复的和和很多其他的…可能重复的和很多其他的…非常感谢。这就是我一直在寻找的解决方案:)非常感谢。这就是我一直在寻找的解决方案:)