سؤال

var list = [];
$.getJSON("json.js", function(data) {
    $.each(data, function(i, item) {
        console.log(item.text);
        list.push(item.text);
    });
});
console.log(list.length);

وlist.length دوما بإرجاع 0. لقد تصفحها JSON في الحرائق وانها شكلت بشكل جيد ويبدو كل شيء على ما يرام. أنا فقط لا يمكن أن يبدو لإضافة عنصر إلى مجموعة ما أنا في عداد المفقودين؟

هل كانت مفيدة؟

المحلول

ومنذ $.getJSON غير المتزامن، وأعتقد أن تطلق كود console.log(list.length); قبل أن يتم ملؤها مجموعة الخاصة بك. لتصحيح هذا وضع بيان console.log الخاص داخل الاستدعاء الخاص بك:

var list = new Array();
$.getJSON("json.js", function(data) {
    $.each(data, function(i, item) {
        console.log(item.text);
        list.push(item.text);
    });
    console.log(list.length);
});

نصائح أخرى

وانت جعل طلب اياكس وهو لذلك غير المتزامن يحدث سجل حدة التحكم الخاصة بك لطول القائمة قبل اكتمال طلب اياكس.

والطريقة الوحيدة لتحقيق ما تريد القيام به هو تغيير دعوة اياكس أن يكون متزامن. يمكنك القيام بذلك عن طريق استخدام .ajax ويمر في asynch: كاذبة ولكن لا ينصح بذلك لأنه يؤمن UI حتى عاد المكالمة، إذا لم تتمكن من العودة للمستخدم أن تحطم من المتصفح

وهذا الأمل سوف تساعدك ..

var list = [];
    $(document).ready(function () {
        $('#test').click(function () {
            var oRows = $('#MainContent_Table1 tr').length;
            $('#MainContent_Table1 tr').each(function (index) {
                list.push(this.cells[0].innerHTML);
            });
        });
    });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top