使用javascript将函数返回值赋给某个​​变量

时间:2010-10-15 10:27:32

标签: jquery

我有一个js函数,在做了一些业务逻辑之后,javascript函数应该将一些结果返回给另一个变量。下面的示例代码

var response="";
function doSomething() {  
    $.ajax({
        url:'action.php',
        type: "POST",
        data: dataString,
        success: function (txtBack) { 
            if(txtBack==1) {
                status=1;
            }
    });
    return status;     
}

我想在这里使用

response=doSomething();

我想指定一个返回值“status”“var response”。但结果是'undefined'。

5 个答案:

答案 0 :(得分:54)

或者只是......

var response = (function() {
    var a;
    // calculate a
    return a;
})();  

在这种情况下,响应变量接收函数的返回值。该函数立即执行。

如果要使用需要计算的值填充变量,则可以使用此构造。请注意,所有计算都在匿名函数内部进行,因此您不会污染全局命名空间。

答案 1 :(得分:16)

AJAX请求是异步的。您的doSomething函数正在被执行,正在进行AJAX请求,但它是异步发生的;所以doSomething的剩余部分被执行,并且返回时status的值是未定义的。

实际上,您的代码的工作方式如下:

function doSomething(someargums) {
     return status;
}

var response = doSomething();

然后一段时间后,你的AJAX请求正在完成;但现在已经太晚了

您需要更改代码,并在AJAX请求的“成功”回调中填充“响应”变量。在AJAX调用完成之前,您将不得不延迟使用响应。

您之前可能有过的地方

var response = doSomething();

alert(response);

你应该这样做:

function doSomething() {  
    $.ajax({
           url:'action.php',
           type: "POST",
           data: dataString,
           success: function (txtBack) { 
            alert(txtBack);
           })
    }); 
};

答案 2 :(得分:6)

您只需从函数中返回一个值:

var response = 0;

function doSomething() {
    // some code
    return 10;
}
response = doSomething();

答案 3 :(得分:1)

在上下文中检索正确值的唯一方法是同步运行$.ajax()函数(实际上与主AJAX思想相矛盾)。您应将特殊配置属性async设置为false。在这种情况下,实际包含$.ajax()函数调用的主范围将暂停,直到同步函数完成为止,因此return仅在$.ajax()之后调用。

function doSomething() {
    var status = 0;
    $.ajax({
        url: 'action.php',
        type: 'POST',
        data: dataString,
        async: false,
        success: function (txtBack) {
            if (txtBack == 1)
                status = 1;
        }
    });

    return status;
}

var response = doSomething();

答案 4 :(得分:0)

由于HandlerThread运行异步操作,因此结果为undefined。这意味着$.ajaxreturn status操作完成请求之前被执行。

您可以使用Promise来获得同步的语法。

$.ajax

您可以这样称呼诺言

function doSomething() { 
    return new Promise((resolve, reject) => {
        $.ajax({
            url:'action.php',
            type: "POST",
            data: dataString,
            success: function (txtBack) { 
                if(txtBack==1) {
                    resolve(1);
                } else {
                    resolve(0);
                }
            },
            error: function (jqXHR, textStatus, errorThrown) {
                reject(textStatus);
            }
        });
    });
}

或这个

doSomething.then(function (result) {
    console.log(result);
}).catch(function (error) {
    console.error(error);
});