使用AJAX从Function返回值

时间:2015-06-30 01:28:19

标签: javascript jquery ajax json asp.net-mvc-4

我写了这个脚本FUNCTION来检查小额现金是否已经使用AJAX设置...

function GetPettyCash() {
        $.ajax({
            type: 'GET',
            url: '@Url.Action("CashSet", "POS")',
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                if (data["CashSetIn"] == "true") {
                    alert(data["CashSetAmount"]);
                    return true;
                }
                else {
                    alert(data["CashSetIn"]);
                    return false;
                }

            },
            error: function (req, status, errorObj) {
                alert(errorObj.toString());
                return false;
            }
        });
    }

我为我的Ajax调用编写了这个Controller:

[HttpGet]
    public JsonResult CashSet()
    {
        Login login = new Login();
        login.CheckPettyCash();
        if (login.CashInSet == true)
        {
            return Json(new
            {
                CashSetIn = "true",
                CashSetAmount = login.CashInAmount

            },JsonRequestBehavior.AllowGet);
        }
        else
        {
            return Json(new
            {
                CashSetIn = "false",
                CashSetAmount = "0"
            }, JsonRequestBehavior.AllowGet);
        }
    }

我的控制器返回此JSON:

{"CashSetIn":"true","CashSetAmount":1000}

但我在JS脚本中的函数总是返回undefined ... 关于如何解决这个问题的任何建议?

我试过测试一下:

alert(data["CashSetAmount"]);
//the Result: 1000

alert(data["CashSetIn"]);
//the Result: true

alert(data);
//the Result: [object Object]

1 个答案:

答案 0 :(得分:1)

$.ajax不等待AJAX​​请求返回。它改为启动请求并继续。如果您将功能更改为

function GetPettyCash() {
        $.ajax( //...
        );
        return true;
    }

总会返回true。您指定的返回值是您使用function关键字定义的匿名回调函数的返回值。

您需要使用回调函数来通知您的页面传入的数据。您不希望编写导致整个页面等待收到响应的函数。

例如,您可以执行以下操作:

function GetPettyCash() {
        $.ajax({
            type: 'GET',
            url: '@Url.Action("CashSet", "POS")',
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                if (data["CashSetIn"] == "true") {
                    do_something_with_petty_cash(true);
                }
                else {
                    do_something_with_petty_cash(false);
                }

            },
            error: function (req, status, errorObj) {
                alert(errorObj.toString());
                return false;
            }
        });
    }
function do_something_with_petty_cash(petty_cash) {
       if (petty_cash)
           // ...
    }