2013-08-05 121 views
1

我需要幫助瞭解我實際出錯的位置。從CFC JSON響應訪問信息

所以我使用jQueryUI的datepicker,http://jqueryui.com/datepicker/

我用這個教程的一部分:http://www.phpeveryday.com/articles/jQuery-UI-AJAX-JSON-Datepicker-P1029.html

我使用AJAX來查詢數據庫,因此將只允許從數據庫日期。下面是JSON返回:

{"COLUMNS":["APPOINTMENT_DATE"],"DATA":[["July, 29 2013 00:00:00"]]}

下面是我整個的JavaScript:

$(document).ready(function() { 

var months = [], days = []; 

$.ajax({ 
    type: 'get', 
    url: 'cfc/datepicker.cfc?ReturnFormat=json', 
    data: { 
     method: 'getDates', 
     todayDate: '07-29-2013' 
     }, 
    contentType: 'json', 
    dataType: 'json', 
    success: function(response) { 
     for (x = 0; x < response.DATA.length; x++) { 
      months.push(response.DATA[x].month); 
      days.push(response.DATA[x].day); 
     } 
    } 
}); 

function addDates(date){ 
    //Weekends are NOT selectable 
    if (date.getDay() == 0 || date.getDay() == 6) { 
     return [false, ""]; 
    } 

    //Using AJAX call above, all RETURNED dates are selectable 
    for (x = 0; x < days.length; x++) { 
     if (date.getMonth() == months[x] - 1 && 
      date.getDate() == days[x]) { 
      return [true, ""]; 
     } 
    } 

    //If dates are not from above, they are NOT selectable 
    return [false, ""]; 
} 

var DP_options = { 
    beforeShowDay: addDates 
//  minDate: "+1" 
}; 

$("#dateInput").datepicker(DP_options); 
}); 

我瞭解下addDates功能應有盡有。我遇到的問題是AJAX呼叫。我可以得到一個迴應,這是我很難成功的功能。它應該使用JSON響應,並將這些變量推到monthsdays變量的頂部,addDates函數將使用這些變量來啓用它們。

如何將JSON響應中的信息推送到monthsdays變量?或者我錯過了一步?

+0

你真的應該在「成功」處理程序中聲明「var」,也在「addDates」中聲明「x」。 *編輯*我看到它就像你的教程。這是可悲的。 – Pointy

+2

你說的JSON是從CFC返回的('{「COLUMNS」:[「APPOINTMENT_DATE」],「DATA」:[[「2013年7月29日00:00:00」]]}'不匹配你正在嘗試使用它的方式,'response.DATA [x] .month'等。你需要爲你的代碼返回正確的JSON,或者重新編寫你的代碼來處理它接收的數據。 –

+0

@Pointy - 我會研究聲明這些變量。一旦我找出如何處理它,我將編輯原始代碼。 – Chester

回答

1

後以亞當的建議,我把我的除了JSON響應。我做的一個重要的錯誤是不是看着教程,並看到JSON響應要求單獨列。我只是假設一個DATE字符串可以分開來分隔MONTH和DAY變量。可能不會。

這是返回的JSON:

{"COLUMNS":["APPOINTMENT_DATE"],"DATA":[["August, 06 2013 00:00:00"]]}

僅供參考,下面是我工作的JavaScript,返回將只允許從數據庫中返回的日期是可選擇的。

$(document).ready(function() { 

var months = []; 
var days = []; 

$.ajax({ 
    type: 'get', 
    url: 'cfc/datepicker.cfc?ReturnFormat=json', 
    data: { 
     method: 'getDates' 
     }, 
    contentType: 'json', 
    dataType: 'json', 
    success: function(response) { 
     for(var x = 0; x < response.DATA.length; x++) { 
      var monthName = { 
       January: 1, 
       February: 2, 
       March: 3, 
       April: 4, 
       May: 5, 
       June: 6, 
       July: 7, 
       August: 8, 
       September: 9, 
       October: 10, 
       November: 11, 
       December: 12 
      } 
      //Expected Response: {"COLUMNS":["APPOINTMENT_DATE"],"DATA":[["August, 06 2013 00:00:00"]]} 
      var thisResponse = response.DATA[x]; //"August, 06 2013 00:00:00" 
      var stringResponse = String(thisResponse); //Above is an Object, convert to String 
      var thisMonth = String(stringResponse.split(",")[0]); //August 
      var thisMonth_Num = String(monthName[thisMonth]); //Use monthName key above 
      var thisDay = stringResponse.split(" ")[1]; // 06 
      var thisDay = thisDay.trim(); //get rid of any spaces 
       months.push(thisMonth_Num); 
       days.push(thisDay); 
     } 
    } 
}); 

function addDates(date){ 
    //Weekends are NOT selectable 
    if (date.getDay() == 0 || date.getDay() == 6) { 
     return [false, ""]; 
    } 

    //Using AJAX call above, all RETURNED dates are selectable 
    for (var x = 0; x < days.length; x++) { 
     if (date.getMonth() == months[x] - 1 && 
      date.getDate() == days[x]) { 
      return [true, ""]; 
     } 
    } 

    //If dates are not from above, they are NOT selectable 
    return [false, ""]; 
} 

var DP_options = { 
    beforeShowDay: addDates 
}; 

$("#dateInput").datepicker(DP_options); 
}); 

我還採取了Pointy的建議,宣佈x變量爲var