jQuery中$.getJSON的返回值问题

    在使用$.getJSON获得数据库的返回值后,想将该值return传给其他函数。结果遇到问题。

$.getJSON(url, data, function(result)
{
    return result;
});

       结果其他函数使用该值时,一直显示为空。经过搜索(http://stackoverflow.com/questions/31129/how-can-i-return-a-variable-from-a-getjson-function),忘记了getJSON()是异步函数的原因在作怪,即函数已经return了,但getJSON仍未执行完。

复制代码
附:AJAX同步与异步的区别

以xmlhttp.open()为例:
    如果设置async为同步(false),函数在执行完send后,会继续执行onreadystatechange,等onreadystatechange执行完并取得responseText后才会继续执行下一条语句,所以returnValue一定有值。
    如果是异步(true),返回值一定是null,因为程序执行完send后不等xmlhttp的响应,继续执行下一条语句,所以returnValue还没有来的及变化就已经返回null了。

    所以如果想获得xmlhttp返回值必须用同步,异步无法得到返回值。
复制代码

 

       将代码修改为

var res;
$.getJSON(url, data, function(result)
{
    res = result;
});
return res;

      当其他函数使用该返回值时,可以正常使用。

       但更好的方法是使用.ajax方法:

复制代码
var mydata = [];
$.ajax({
  url: 'data.php',
  data: {age : 20, sex : 'man'},
  async: false,
  dataType: 'json',
  success: function (result) {
    mydata = result.whatever;
  }
});
return mydata;
复制代码

 

参考:getJSON api

posted @ 2016-09-20 15:28  gyx13  阅读(1404)  评论(0编辑  收藏  举报