Javascript 从getJson调用中检索值的基本问题
我有一个MVC2应用程序。在客户端,有一个函数正在调用控制器,并返回一个值,但我无法将其放入JavaScript变量中供后续使用 以下是控制器返回的JSON(这部分工作正常,我与Fiddler进行了检查): 下面是我的JS/jQuery函数: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
function getSelectedCompanyID() {
$.ajaxSetup({ cache: false });
var cid = "";
$.getJSON("/Company/GetLatestCompanyID/", function (json) {
cid = json.CompanyID;
});
return cid;
}
谢谢
编辑:
只是想澄清一下,问题似乎出在这一行:
cid = json.CompanyID;
或者使用JSON调用本身。检索到的值未放入JS变量中 调用是异步的。在HTTP请求完成之前,传递给“$.getJSON()”的回调函数实际上不会被调用,这将是外部函数返回后的一段长时间 处理这一事实的编码方法是将处理结果所需的所有逻辑放入回调函数中。也就是说,不要编写期望外部函数返回值的代码,而是将所有代码放在回调本身内部 编辑-以下是活动时间表,以澄清:
return
station,然后该函数退出然后过了一段时间:
调用是异步的。在HTTP请求完成之前,传递给“$.getJSON()”的回调函数实际上不会被调用,这将是外部函数返回后的一段长时间 处理这一事实的编码方法是将处理结果所需的所有逻辑放入回调函数中。也就是说,不要编写期望外部函数返回值的代码,而是将所有代码放在回调本身内部 编辑-以下是活动时间表,以澄清:
return
station,然后该函数退出然后过了一段时间:
我知道它是异步的。此函数响应页面上的客户端事件。问题不在于它何时执行,而在于它没有将返回值放入cid变量,而是被放入变量。当函数执行时,您已经从该函数返回。@draconis问题是无法让外部函数“getSelectedCompanyID”等待异步调用完成。启动异步操作后,JavaScript解释器将立即执行该
return
语句。许多毫秒后,异步调用将完成。@draconis:执行时正是问题所在。@Pointy:仔细阅读您的详细响应,我现在理解了问题所在,谢谢。有没有什么方法可以阻止Javascript执行直到异步请求完成?我知道它是异步的。此函数响应页面上的客户端事件。问题不在于它何时执行,而在于它没有将返回值放入cid变量,而是被放入变量。当函数执行时,您已经从该函数返回。@draconis问题是无法让外部函数“getSelectedCompanyID”等待异步调用完成。启动异步操作后,JavaScript解释器将立即执行该return
语句。许多毫秒后,异步调用将完成。@draconis:执行时正是问题所在。@Pointy:仔细阅读您的详细响应,我现在理解了问题所在,谢谢。是否有任何方法可以在异步请求完成之前暂停Javascript执行?它肯定被放置在那里。但是,在发生这种情况时,返回cid代码>语句只是一个遥远的m
cid = json.CompanyID;