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

Javascript 从getJson调用中检索值的基本问题,javascript,jquery,asp.net-mvc-2,Javascript,Jquery,Asp.net Mvc 2,我有一个MVC2应用程序。在客户端,有一个函数正在调用控制器,并返回一个值,但我无法将其放入JavaScript变量中供后续使用 以下是控制器返回的JSON(这部分工作正常,我与Fiddler进行了检查): 下面是我的JS/jQuery函数: function getSelectedCompanyID() { $.ajaxSetup({ cache: false }); var cid = ""; $.getJSON("/C

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

以下是控制器返回的JSON(这部分工作正常,我与Fiddler进行了检查):

下面是我的JS/jQuery函数:

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

编辑: 只是想澄清一下,问题似乎出在这一行:

cid = json.CompanyID;

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

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

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

编辑-以下是活动时间表,以澄清:

  • 页面上发生了一些事情,触发了对“getSelectedCompanyID()”的调用
  • “getSelectedCompanyID”函数调用“$.getJSON()”,传入一个URL和一个匿名函数,完成HTTP请求后,将在外部闭包中为一些返回的数据设置一个局部变量
  • jQuery代码做了一系列工作来设置XMLHttpRequest,启动它,然后返回到“getSelectedCompanyID()”
  • 计算“getSelectedCompanyID()”函数末尾的
    return
    station,然后该函数退出
  • 调用“getSelectedCompanyID()”的代码失望地盯着从“getSelectedCompanyID()”返回的空值

    然后过了一段时间:

  • HTTP请求在服务器返回响应时完成
  • jQuery包装器代码反序列化JSON响应,并调用在步骤2中传入的匿名处理程序
  • 匿名处理函数将返回的JSON对象中的值粘贴到“cid”变量中,然后退出

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

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

    编辑-以下是活动时间表,以澄清:

  • 页面上发生了一些事情,触发了对“getSelectedCompanyID()”的调用
  • “getSelectedCompanyID”函数调用“$.getJSON()”,传入一个URL和一个匿名函数,完成HTTP请求后,将在外部闭包中为一些返回的数据设置一个局部变量
  • jQuery代码做了一系列工作来设置XMLHttpRequest,启动它,然后返回到“getSelectedCompanyID()”
  • 计算“getSelectedCompanyID()”函数末尾的
    return
    station,然后该函数退出
  • 调用“getSelectedCompanyID()”的代码失望地盯着从“getSelectedCompanyID()”返回的空值

    然后过了一段时间:

  • HTTP请求在服务器返回响应时完成
  • jQuery包装器代码反序列化JSON响应,并调用在步骤2中传入的匿名处理程序
  • 匿名处理函数将返回的JSON对象中的值粘贴到“cid”变量中,然后退出

  • 我知道它是异步的。此函数响应页面上的客户端事件。问题不在于它何时执行,而在于它没有将返回值放入cid变量,而是被放入变量。当函数执行时,您已经从该函数返回。@draconis问题是无法让外部函数“getSelectedCompanyID”等待异步调用完成。启动异步操作后,JavaScript解释器将立即执行该
    return
    语句。许多毫秒后,异步调用将完成。@draconis:执行时正是问题所在。@Pointy:仔细阅读您的详细响应,我现在理解了问题所在,谢谢。有没有什么方法可以阻止Javascript执行直到异步请求完成?我知道它是异步的。此函数响应页面上的客户端事件。问题不在于它何时执行,而在于它没有将返回值放入cid变量,而是被放入变量。当函数执行时,您已经从该函数返回。@draconis问题是无法让外部函数“getSelectedCompanyID”等待异步调用完成。启动异步操作后,JavaScript解释器将立即执行该
    return
    语句。许多毫秒后,异步调用将完成。@draconis:执行时正是问题所在。@Pointy:仔细阅读您的详细响应,我现在理解了问题所在,谢谢。是否有任何方法可以在异步请求完成之前暂停Javascript执行?它肯定被放置在那里。但是,在发生这种情况时,
    返回cid语句只是一个遥远的m
    
    cid = json.CompanyID;