لماذا هذا جافا سكريبت / مسج JSON توزيع التعليمات البرمجية لا تعمل؟

StackOverflow https://stackoverflow.com/questions/1445529

سؤال

وهنا هو قانون بلدي مسج. يجب أن تحليل سلمان إرجاعها بواسطة هذا السيناريو بي. ومن المعروف أن فب العمل. وينبغي أيضا أن تحويل الحرفية التاريخ إلى كائن تاريخ جافا سكريبت. ومع ذلك، يحدث خطأ في dates.length. يمكن لأي شخص أن يرى ما هو الخطأ مع رمز؟

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);
        }
    });
}
هل كانت مفيدة؟

المحلول

وسوف (احتمال) أن الحصول على تنفيذ التعليمات البرمجية منتقي التاريخ لديك قبل اكتمال الدعوة اياكس. في الحد الأدنى، ومحاولة تحريك جزء منتقي التاريخ من التعليمات البرمجية في الاستدعاء $ .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");

}

وتحرير: بوصفها جانبا، وإذا كان لي، كنت على الارجح تقسيمها إلى نوع من وظيفة الطالب للحصول على البيانات التاريخ ويطعمه معاودة الاتصال بكم. منها مثلا: -

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);
            }
        });
    });

نصائح أخرى

والمشكلة هي أن يتم التقويم الخاص بك كود منتقي التاريخ تنفذ قبل AJAX معالجة.

ورمز منتقي التاريخ الخاص بك يحتاج للذهاب داخل الدالة رد $ .post، تحت لحلقة، وتحت dates = data; خط

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top