从getJson调用中检索值的基本问题

时间:2011-03-11 13:24:48

标签: javascript jquery asp.net-mvc-2

我有一个MVC 2应用程序。在客户端,有一个函数正在调用控制器,并且正在返回一个值,但我无法将其放在JavaScript变量中以供后续使用。

这是控制器返回的JSON(这部分工作正常,我和Fiddler一起检查过):

{"CompanyID":781}

这是我的JS / jQuery函数:

function getSelectedCompanyID() {
            $.ajaxSetup({ cache: false });
            var cid = "";
            $.getJSON("/Company/GetLatestCompanyID/", function (json) {
                cid = json.CompanyID;
            });
            return cid;
        }

感谢。

修改: 只是为了澄清,问题似乎与这一行有关:

cid = json.CompanyID;

或使用JSON调用本身。检索到的值未放入JS变量中。

1 个答案:

答案 0 :(得分:1)

通话异步。传递给“$ .getJSON()”的回调函数在HTTP请求完成之前实际上不会被调用,在外部函数返回后将是长时间

为了处理这个事实而编写代码的方法是在回调函数中加入处理结果所需的所有逻辑。也就是说,不是编写代码以期望外部函数返回值,而是将所有代码放在中回调本身。

编辑 - 这是活动的时间表,澄清:

  1. 您的页面上发生了某些事情,触发(除此之外)对“getSelectedCompanyID()”的调用。
  2. “getSelectedCompanyID”函数调用“$ .getJSON()”,传入一个URL和一个匿名函数,完成HTTP请求后,将在外部闭包中设置一个局部变量一些返回的数据。
  3. jQuery代码执行一系列工作来设置XMLHttpRequest,启动它,然后返回“getSelectedCompanyID()”。
  4. 评估“getSelectedCompanyID()”函数末尾的return语句,并退出该函数。
  5. 调用“getSelectedCompanyID()”的代码对“getSelectedCompanyID()”返回的空值感到失望。

    然后很久以后: <登记/>
  6. 当您的服务器响应时,HTTP请求完成。
  7. jQuery包装器代码反序列化JSON响应并调用在步骤2中传回的匿名处理程序。
  8. 匿名处理程序函数将返回的JSON对象中的值粘贴到“cid”变量中,然后退出。