Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保存来自jqueryajax函数的响应_Javascript_Ajax_Jquery - Fatal编程技术网

Javascript 保存来自jqueryajax函数的响应

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

我有一个自定义函数,它调用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").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肯定这通常不是个好主意。但是如果你的服务保证在一小段毫秒内返回,那么它可能会更有用(更简单)沿着更程序化的路径。可能重复的和和很多其他的…可能重复的和很多其他的…非常感谢。这就是我一直在寻找的解决方案:)非常感谢。这就是我一直在寻找的解决方案:)