当前位置:  开发笔记 > 编程语言 > 正文

如何从$ .getJSON函数返回变量

如何解决《如何从$.getJSON函数返回变量》经验,为你挑选了3个好方法。

我想返回StudentId到外的其他地方使用范围$.getJSON()

j.getJSON(url, data, function(result)
{
    var studentId = result.Something;
});

//use studentId here

我猜想这是与范围有关,但它似乎不相同的方式工作C#



1> g33kz0r..:

它似乎与c#的工作方式不同

要完成类似于C#的作用域,禁用异步操作并将dataType设置为json:

var mydata = [];
$.ajax({
  url: 'data.php',
  async: false,
  dataType: 'json',
  success: function (json) {
    mydata = json.whatever;
  }
});

alert(mydata); // has value of json.whatever


这是一个更好的解决方案,因为getJSON是异步调用,因此在异步调用完成之前无法访问委托中设置的变量.

2> Jason Buntin..:

是的,我以前的回答不起作用,因为我没有注意你的代码.:)

问题是匿名函数是一个回调函数 - 即getJSON是一个异步操作,它会在某个不确定的时间点返回,所以即使变量的范围超出了那个匿名函数(即一个闭包),它也会没有你认为它应该具有的价值:

var studentId = null;
j.getJSON(url, data, function(result)
{
    studentId = result.Something;
});

// studentId is still null right here, because this line 
// executes before the line that sets its value to result.Something

您希望使用getJSON调用设置的studentId值执行的任何代码都需要该回调函数内或回调执行发生.



3> bicycle..:

甚至比以上所有更简单.如前所述,$.getJSON执行导致问题的异步.不要将所有代码重构到$.ajax方法,只需在主.js文件的顶部插入以下内容即可禁用异步行为:

 $.ajaxSetup({
   async: false
 });

祝好运!


这必须是最好的答案
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有