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);
        }
    });
}
Foi útil?

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;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top