2011-09-05 5 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

당신은 당신이 "외부에 있지만 아무 소용이 선언 된 변수에"데이터를 할당하려고했다 : 그래서, 당신은 이런 식으로 뭔가를 할 수 있습니까? beforeShowDay의 – Exupery

+0

함수는 가져 오지 않습니다. 비어 있습니다. 적어도 그것은 함수가 생각하는 것입니다. 설명 william에 대해 감사합니다. – imin

답변

2

올바르게 이해하면 onChangeMonthYear에서 비동기 적으로 AJAX를 통해 데이터를 가져 와서 업데이트 된 데이터를 표시하기 위해 beforeShowDay에 액세스 할 수 있습니다.

전화 주문을 이해하는 데 도움이됩니다. 달력이 처음 나타나면 beforeShowDay으로 많은 전화가 걸립니다. 이 단계에서는 아직 AJAX 통화의 데이터가 없습니다 (즉, test.php).

사용자가 월/연도를 변경하면 onChangeMonthYear이 호출되고 다시 한 번 전화가 beforeShowDay으로 전송됩니다. 이 단계에서 AJAX 호출로 test.php을 호출하면 beforeShowDay에 대한 호출 중 일부가 반환 된 값에 액세스 할 수있을 정도로 충분히 빨리 반환하지 않으면 AJAX 호출의 데이터가 남아 있어야합니다.

그러면 AJAX 호출이 반환되고 반환 된 데이터가 beforeShowDay에 전달되어 표시됩니다.

AJAX 호출은 올바르게 전달하더라도 beforeShowDay이 데이터를 가져올 시간이되지 않으므로 시도한 작업이 작동하지 않습니다. 원하는 것은 AJAX에서 반환 된 데이터를 어딘가에 할당 한 다음 datepicker를 새로 고치므로 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

; btw 내 코드를 변경 한 후 PHP 호출은 json으로 인코딩 된 데이터 (배열)를 반환하고 var getdatafromphp = $ (this) .data ("datafromphp"); 배열로 수신 된 데이터 .. – imin

+0

나는 내 코드를 변경했고, 이제 php 호출은 json으로 인코딩 된 데이터 (배열)를 반환하고, var getdatafromphp = $ (this) .data ("datafromphp")를 실행하면 ;'수신 된 데이터를 배열로 취급하지 않습니다. onChangeMonthYear 함수 내에서'alert (data.length) '를 수행하면 배열의 길이를 반환하기 때문에이 결론을 얻습니다.하지만'alert (getdatafromphp.length)'오류를 반환합니다 (getdatafromphp는 정의되지 않았습니다). – imin

+0

'beforeShowDay'가 먼저 호출되기 때문에'$ (this) .data ("datafromphp")가 설정되기 때문입니다. 이를 피하려면 빈 배열에 대한 데이터를 시작하십시오. 업데이트 된 답변보기 ... –

관련 문제