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

时间:2009-08-05 06:14:55

标签: 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);

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

编辑: 如果我尝试使用像

这样的代码
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
}

我收到的错误就像myCallback没有定义。我好吗? 我还应该在函数myCallback()

之外使用getformid值

3 个答案:

答案 0 :(得分:6)

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

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

alert(test); // you will get undefined here

这将提示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);
}

答案 1 :(得分:2)

正如其他人所说,$.getJSON来电是异步的,并且没有及时完成外部警报。

如果您希望警报功能可以同步,

var getformid;

$.ajax({
    async: false, // This will make call synchronous
    url: "http://localhost/FormBuilder/index.php/forms/getFormEntry",
    dataType: "json",
    success:  function(json) {
        getformid=json.forms[0]["id"];
        alert("Form id inside "+getformid);
        }
 });//json 

alert("Form id ouside "+getformid);

但通常这是一个坏主意。我可能会在登录脚本中执行此操作,在此我不希望用户继续,直到我从服务器获得响应,但通常我会在回调函数中异步执行所有实际工作。

答案 2 :(得分:0)

getJSON回调是在请求结束时异步执行的,你应该使用回调中的值,如果你不喜欢在回调函数里面 getJSON调用,你可以声明一个在那里运作并处理你的逻辑:

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

function myCallback (json) {
  var formId = json.forms[0]["id"];
  // You can work with the response here
}