Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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 AJAX方法Jquery可以';t返回数据_Javascript_Jquery_Ajax_Methods_Return - Fatal编程技术网

Javascript AJAX方法Jquery可以';t返回数据

Javascript AJAX方法Jquery可以';t返回数据,javascript,jquery,ajax,methods,return,Javascript,Jquery,Ajax,Methods,Return,我无法在Jquery中返回ajax请求的值。这是我的密码: function ajaxUniversal(datos, url) { $.ajax({ url: url, data: { valores: datos }, type: "POST", dataType: "html", success: function (data) {

我无法在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
}
我得到了这个错误: 未捕获引用错误:未定义数据
如何返回数据?非常感谢。很抱歉我的英语不好,但我会说西班牙语。

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);
});

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

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;
}
ajaxUniversal( datos, url, callback ).then( function(data){

     //manipulate data here

});

Ajax调用是异步的,所以不能立即从中返回值。相反,它们会返回一个返回值的承诺,因此您可以做的是:

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

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;
}
ajaxUniversal( datos, url, callback ).then( function(data){

     //manipulate data here

});

正如其他人所说,由于请求是异步的,所以这是失败的。您可以按照他们的建议,通过异步处理来修复代码,也可以使用
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;
}
函数ajaxUniversal(datos,url){
var数据;
$.ajax({
url:url,

async:false,//您可以尝试添加async:false选项。这将不起作用。
returlVal
将始终返回未定义的,因为
$。ajax
是异步的。在遇到
return
语句时,它尚未获取所需的数据。我已经编写了几次此类代码,它确实起作用。您不能如果你愿意的话,我会的。虽然我也喜欢你的主意。也许是个更好的主意one@sg.cc它之所以能工作是因为LiranBo使其同步(参见aysnc:false),但imo sg.cc的解决方案更好,因为JS的世界经常围绕着Callbackshanks的概念。
async:false
在我发表评论时并不存在。