Por que isso javascript / jQuery JSON análise de código não trabalho?
-
22-07-2019 - |
Pergunta
Aqui está o meu código jQuery. Deve analisar o JSON retornado por este script php . O PHP é conhecido por trabalho. Ele também deve converter os literais de data para um objeto de data de javascript. No entanto, um erro ocorre no dates.length
. qualquer um pode ver o que está errado com o código?
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);
}
});
}
Solução
Seu código datepicker (potencialmente) estar sendo executado antes da conclusão da chamada ajax. No mínimo, tente mover a parte datepicker do código para o callback $ .post: -
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");
}
Edit: Como um aparte, e se fosse eu, eu provavelmente dividi-la em algum tipo de função de chamada para obter os dados de data e alimentá-lo com uma chamada de retorno. Por exemplo: -
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");
}
E, em seguida, alimentá-lo com uma chamada de retorno para o seu selecionador de data para lidar com: -
__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);
}
});
});
Outras dicas
O problema é que seu código datepicker calendário está em execução antes do AJAX é o processamento feito.
Seu código datePicker precisa ir para dentro da função de retorno $ .post, sob o loop for, e abaixo da linha dates = data;