2015-04-17 3 views
1

Попытка динамического обновления jQuery Datepicker после изменения поля #tour_region. Я взял этот код из веб-блога Салмана и изменил идентификаторы CSS на мои, а также, очевидно, изменил URL-адрес для вызова Ajax.jQuery date picker обновление доступных дат с использованием Ajax

Когда я построил ответ JSON, я протестировал его, используя вызов .ajax, но у Салмана был .getJSON.

Ошибка я получаю: «Uncaught TypeError: Не удается прочитать свойство„запись“неопределенных»

заставляет меня думать, может быть, что-то не так с ответом JSON. Я не слишком хорошо знаком с вызовом .getJSON.

Заранее спасибо.

$(document).ready(function(){ 
    $(function() { 
     var dateList = null; 
     var date1 = new Date; 
     date1.setHours(0, 0, 0, 0); 
     date1.setDate(1); 
     var date2 = new Date; 
     date2.setHours(0, 0, 0, 0); 
     date2.setMonth(date2.getMonth() + 12, 0); 
     $("form #date").datepicker({ 
      minDate: date1, 
      maxDate: date2, 
      beforeShowDay: function(date) { 
       var r = [true, ""]; 
       if (dateList === null) { 
        r[1] = "dp-highlight-unknown"; 
       } else { 
        var key = $.datepicker.formatDate("yy-mm-dd", date); 
        if (key in dateList) { 
         r[1] = "dp-highlight-available"; 
         r[2] = dateList[key].join(", "); 
        } 
       } 
       return r; 
      } 
     }); 
     $("#tour_region").on("change", function(){ 
      var region = $(this).val(); 
      $.getJSON("/dates?region=" + region, { 
       "alt": "json", 
       "start-min": $.datepicker.formatDate("yy-mm-dd", date1), 
       "start-max": $.datepicker.formatDate("yy-mm-dd", new Date(date2.getTime() + 86400000)), 
       "orderby": "starttime", 
       "max-results": 100 
      }, function(data) { 
       dateList = {}; 
       $.each(data.feed.entry, function(i, entry) { 
        var key = entry.gd$when[0].startTime.substr(0, 10); 
        if (key in dateList == false) { 
         dateList[key] = []; 
        } 
        dateList[key].push(entry.title.$t); 
       }); 
       $("form #date").datepicker("refresh"); 
      }); 
     }); 
    }); 
}); 
+0

'$ .getJSON' - это просто ярлык для' $ .ajax ({type: 'JSON'}) '. Я бы посоветовал 'console.log (data)' out посмотреть, действительно ли у вас есть иерархия 'data.feed.entry' в ваших данных – briansol

+1

, так как ошибка говорит, что запись переменной не определена. Можете ли вы опубликовать переменную 'data', которую вы получили в ответ здесь? – bipen

+0

Возврат console.log (данные). ["2015-04-12", "2015-04-11", "2015-04-26", "2015-03-27", "2015-04-17", "2015-03-15", «2015-03-24», «2015-04-03», «2015-04-03», «2015-03-15», «2015-03-21», «2015-04-18», «2015 год» -03-19 "," 2015-03-17 "," 2015-04-17 "," 2015-04-20 "," 2015-04-21 "," 2015-04-15 "," 2015-03 -17 "," 2015-04-06 "," 2015-03-24 "," 2015-04-10 "," 2015-03-30 "," 2015-03-24 "," 2015-03-10 «2015-04-20», «2015-04-17», «2015-04-23», «2015-03-27»] – nonegiven72

ответ

0

Это позволяет сборщику даты показывать только даты, возвращенные из .getJSON. Всем спасибо.

var dateList = null; 
    $(function() {  
    var date1 = new Date; 
    date1.setHours(0, 0, 0, 0); 
    date1.setDate(1); 

var date2 = new Date; 
date2.setHours(0, 0, 0, 0); 
date2.setMonth(date2.getMonth() + 12, 0); 

$("form #date").datepicker({ 
    minDate: date1, 
    maxDate: date2, 
    beforeShowDay: function(date) {     
     var r = [false, ""]; 
     if (dateList === null) { 
      r[1] = "dp-highlight-unknown"; 
     } else { 
      var key = $.datepicker.formatDate("yy-mm-dd", date);       
      if ($.inArray(key, dateList) != -1) { 
       r[0] = true;        
       r[1] = "dp-highlight-available";        
      } 
     } 
     return r; 
    } 
}); 

$("#tour_region").on("change", function(){ 
    var region = $(this).val(); 
    $.getJSON("/dates?region=" + region, { 
     "alt": "json", 
     "start-min": $.datepicker.formatDate("yy-mm-dd", date1), 
     "start-max": $.datepicker.formatDate("yy-mm-dd", new Date(date2.getTime() + 86400000)), 
     "orderby": "starttime", 
     "max-results": 100 
    }, function(data) { 
     console.log(data); 
     dateList = []; 
     $.each(data, function(i, entry) {    
      if ($.inArray(entry, dateList) == -1) { 
       dateList.push(entry); 
      }    
     }); 
     $("form #date").datepicker("refresh"); 
    }); 
});   
});