AJAX方法Jquery无法返回数据

时间:2015-10-06 21:56:02

标签: javascript jquery ajax methods return

我无法在Jquery中返回ajax请求的值。这是我的代码:

    function ajaxUniversal(datos, url) {
    $.ajax({
        url: url,
        data: {
            valores: datos
        },
        type: "POST",
        dataType: "html",
        success: function (data) {
            console.log("Datos recibidos: "+data)
            return data; //This does not returns the data
        },
        error: function (errorThrown) {
            return false;
        }
    });
}

如果我将return语句添加到final:

function ajaxUniversal(datos, url) {
    $.ajax({
        url: url,
        data: {
            valores: datos
        },
        type: "POST",
        dataType: "html",
        success: function (data) {
            console.log("Datos recibidos: "+data)
            return data;
        },
        error: function (errorThrown) {
            return false;
        }
    });
    return data;//This is the statement but not works
}

我收到此错误: 未捕获的ReferenceError:未定义数据 我该如何退回数据?谢谢。抱歉我的英语不好,但我说西班牙语。

4 个答案:

答案 0 :(得分:1)

Ajax调用是异步的,因此您无法立即从中返回值。相反,他们返回一个返回值的承诺,所以你可以做的是:

ReplyKeyboardMarkup

并称之为:

function ajaxUniversal(datos, url, callback) {
return $.ajax({
    url: url,
    data: {
        valores: datos
    },
    type: "POST",
    dataType: "html"
});
}

答案 1 :(得分:0)

Ajax调用是异步的,因此您无法使用它们返回数据。如果要使用该数据,则需要使用回调函数。

function ajaxUniversal(datos, url, callback) {
    $.ajax({
        url: url,
        data: {
            valores: datos
        },
        type: "POST",
        dataType: "html",
        success: function (data) {
            console.log("Datos recibidos: "+data)
            callback(data);
        },
        error: function (errorThrown) {
            callback(errorThrown);
        }
    });
}

...别处

ajaxUniversal(someData, someUrl, function(data){
    // Do work with data here
    console.log(data);
});

答案 2 :(得分:0)

您无法退回该项目,因为它已不再存在。首先尝试定义它,如下所示:

function ajaxUniversal(datos, url) {
    var returlVal;
    $.ajax({
        url: url,
        async: false, 
        data: {valores: datos},
        type: "POST",
        dataType: "html",
        success: function (data) {
            console.log("Datos recibidos: "+data)
            returlVal = data;
        },
        error: function (errorThrown) {
            returlVal = false;
        }
    });
    return returlVal;
}

答案 3 :(得分:0)

正如其他人所说,由于请求是异步的,因此失败了。您可以通过异步处理来修复代码,也可以使用async: false将请求设置为同步。

function ajaxUniversal(datos, url) {
    var data;
    $.ajax({
        url: url,
        async: false,  // <---- this will cause the function to wait for a response
        data: {
            valores: datos
        },
        type: "POST",
        dataType: "html",
        success: function (data) {
            console.log("Datos recibidos: "+data)
            data = data;
        }
    });
    return data;
}