2011-09-05 251 views
0

我試圖將數據從onChangeMonthYear發起的函數傳遞給beforeShowDay啓動的函數。我嘗試了各種方法,比如將我從test.php獲得的數據分配給在外部聲明的變量,但無濟於事。所以我所做的只是用test.php中的檢索數據更新文本字段,並要求beforeShowDay中的函數從那裏獲取數據。這裏是我的代碼的一部分jquery datepicker將變量從一個函數傳遞給另一個函數

$(document).ready(function() { 

    $('#datepicker').datepicker({dateFormat: 'dd-mm-yy', currentText: 'Now', changeMonth: true, changeYear: true, altField: '#alternate', altFormat: 'DD, d MM, yy', onSelect: function(dateText, inst) {}, 
     onChangeMonthYear: function(year,month,inst){ 
      $.post("test.php", {action: "TEST", month: month, year: year}, 
      function (data){ 
       $("#datafromphp").val(data); 
      } 
      ,"html"); 
     }, 
     beforeShowDay: function (date){ 
      var getdatafromphp= $("#datafromphp").val(); 

     } 
    }); 
}); 

當然有更好的方法來做到這一點?

+0

你說過你試圖將數據分配給「在外部聲明的變量但無濟於事」 - 當你試圖這樣做時發生了什麼? – Exupery

+0

函數在beforeShowDay不會得到我 - 它是空的。至少這是什麼功能認爲 – imin

回答

2

如果我的理解正確,您希望通過AJAX異步獲取一些數據在onChangeMonthYear中,並使其可在beforeShowDay中訪問以顯示更新的數據。

它有助於理解調用的順序。當日歷第一次出現時,會有一堆電話打到beforeShowDay。在這個階段,您的AJAX呼叫尚未收到數據(即從test.php)。

一旦用戶改變月份/年,onChangeMonthYear將被調用,然後一堆電話再次被撥到beforeShowDay。在這個階段,除非您撥打test.php的AJAX呼叫能夠足夠快地返回到beforeShowDay的某些呼叫來訪問返回的值,否則應該沒有來自您的AJAX呼叫的數據。

然後AJAX調用返回並返回的數據以某種方式傳遞到beforeShowDay來顯示。

正如你所看到的,你試圖做的事情是行不通的,因爲即使你正確地「傳遞」了它,AJAX調用也不會準時抓取數據。你想要做的是,從AJAX中分配返回的數據,然後刷新日期選擇器,所以beforeShowDay將再次被調用。您可以使用.data()將數據存儲到任意jQuery對象。所以,你可以這樣做:

$('#datepicker').data('datafromphp', []).datepicker({dateFormat: 'dd-mm-yy', currentText: 'Now', changeMonth: true, changeYear: true, altField: '#alternate', altFormat: 'DD, d MM, yy', onSelect: function(dateText, inst) {}, 
    onChangeMonthYear: function(year,month,inst){ 
     $.post("test.php", {action: "TEST", month: month, year: year}, 
     function (data){ 
      $("#datepicker").data('datafromphp', data).datepicker('refresh'); 
     } 
     ,"html"); 
    }, 
    beforeShowDay: function (date){ 
     var getdatafromphp= $(this).data("datafromphp"); 

    } 
}); 
+0

感謝您的解釋william;順便說一句,我做了我的代碼的變化,現在的PHP調用返回一個JSON編碼的數據(數組),似乎通過做'var getdatafromphp = $(this).data(「datafromphp」);'它不治療收到的數據作爲數組.. – imin

+0

我做了我的代碼的更改,現在的PHP調用返回一個JSON編碼的數據(數組),似乎通過做'var getdatafromphp = $(this).data(「datafromphp」) ;'它不會將接收到的數據視爲數組..我得到這個結論,因爲如果我在onChangeMonthYear函數內執行'alert(data.length)',它將返回數組的長度,但是如果我把'alert (getdatafromphp.length)'它會返回一個錯誤(getdatafromphp是undefined) – imin

+0

這是因爲在$(this).data(「datafromphp」)被設置之前會先調用beforeShowDay。如果您想避免這種情況,只需將數據啓動到一個空數組。查看更新的答案... –

相關問題