2009-09-18 153 views
1

這是我的jQuery代碼。它應該解析由this php腳本返回的json。 PHP已知工作。它還應該將日期文字轉換爲javascript日期對象。但是,在dates.length發生錯誤。任何人都可以看到代碼有什麼問題嗎?爲什麼這個javascript/jQuery JSON解析代碼不起作用?

if($("#calendar").length) 
{ 
    var dates; 
    $.post("/dates/jsondates.php",function(data) 
    { 
     for(var i=0; i<data.length; i++) 
     { 
      data[i].start = new Date(data[i].start); 
      data[i].end = new Date(data[i].end); 
     } 
     dates = data; 
    }, "json"); 

    $("#calendar").datepicker(
    { 
     beforeShowDay: function(date) 
     { 
      for(var i=0; i<dates.length; i++) 
      { 
       if(dates[i].start<date<dates[i].end) 
       { 
        return new Array(0, "booked", dates[i].comment); 
       } 
      } 
      return new Array(1); 
     } 
    }); 
} 

回答

1

下您的日期選擇代碼(可能)會獲取Ajax調用完成之前執行。至少,嘗試代碼的日期選擇器部分移動到$。員額回調: -

if ($("#calendar").length) 
{ 
    var dates; 
    $.post("/dates/jsondates.php",function(data) 
    { 
     for(var i=0; i<data.length; i++) 
     { 
       data[i].start = new Date(data[i].start); 
       data[i].end = new Date(data[i].end); 
     } 
     dates = data; 

     $("#calendar").datepicker(
     { 
      beforeShowDay: function(date) 
      { 
        for(var i=0; i<dates.length; i++) 
        { 
          if(dates[i].start<date<dates[i].end) 
          { 
            return new Array(0, "booked", dates[i].comment); 
          } 
        } 
        return new Array(1); 
      } 
     }); 
    }, "json"); 

} 

編輯:順便說一句,如果是我,我可能把它分解成某種調用者函數來獲取日期數據併爲其提供回調。 E.g: -

function __callDateController(callback) 
{ 
    $.post("/dates/jsondates.php",function(data) 
    { 
     for(var i=0; i<data.length; i++) 
     { 
      data[i].start = new Date(data[i].start); 
      data[i].end = new Date(data[i].end); 
     } 

     if (callback !== undefined) { 
      callback(data); 
     } 
    }, "json"); 
} 

然後給它一個回調的日期選擇器來處理: -

__callDateController(function(dates) 
{ 
    $("#calendar").datepicker(
     { 
      beforeShowDay: function(date) 
      { 
       for(var i=0; i<dates.length; i++) 
       { 
        if(dates[i].start<date<dates[i].end) 
        { 
         return new Array(0, "booked", dates[i].comment); 
        } 
       } 
       return new Array(1); 
      } 
     }); 
    }); 
1

問題是您的日曆日期選擇器代碼在AJAX完成處理之前正在執行。

您的日期選擇器的代碼需要去.post的$回調函數內,下方for循環,而行dates = data;

相關問題