如何在JQuery中保存$ .getJSON返回值

use*_*non 3 jquery cakephp

我正在做一个使用JQuery和Cakephp的应用程序.

在这里我使用如下所示从我的控制器端检索值

var getformid;
$.getJSON("http://localhost/FormBuilder/index.php/forms/getFormEntry", function(json) {
  getformid=json.forms[0]["id"];
  alert("Form id inside "+getformid);
});//json 

alert("Form id ouside "+getformid);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,$ .getJSON内部的内部警报给我正确的值为75但外部警报显示错误为getformid未定义..为什么?我们不能使用外面的getformid $ .getJSON.请建议我.我想利用该值来保存Field ..

编辑:如果我尝试使用像这样的代码

var getformid;    
$.getJSON("http://localhost/FormBuilder/index.php/forms/getFormEntry", myCallback);

function myCallback (json) {
  getformid = json.forms[0]["id"];

  // You can work with the response here
}
Run Code Online (Sandbox Code Playgroud)

我收到错误,像myCallback没有定义.WHy所以?我也应该在函数myCallback()之外使用getformid值

RaY*_*ell 6

您必须等到$.getJSON在开始使用它之前返回该值.所以,如果你这样做:

var test;
$.getJSON('url', function(data) {
    test = data;
});

alert(test); // you will get undefined here
Run Code Online (Sandbox Code Playgroud)

这将提示undefined,因为JS不等待$.getJSON完成获取数据(AJAX根据定义是异步的),并且当测试尚未初始化时将调用alert.

您可能应该做的是将"外部"代码包装在某个函数中并从$.getJSON回调中调用该函数.

var test;
$.getJSON('url', function(data) {
    test = data;
    showAlert(); // this call will display actual value
});

function showAlert() {
    alert(test);
}
Run Code Online (Sandbox Code Playgroud)