لماذا هذا جافا سكريبت / مسج JSON توزيع التعليمات البرمجية لا تعمل؟
-
22-07-2019 - |
سؤال
وهنا هو قانون بلدي مسج. يجب أن تحليل سلمان إرجاعها بواسطة هذا السيناريو بي. ومن المعروف أن فب العمل. وينبغي أيضا أن تحويل الحرفية التاريخ إلى كائن تاريخ جافا سكريبت. ومع ذلك، يحدث خطأ في 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;
خط