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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM