Скрипт выходит из-под контроля

0

С моим взглядом происходит что-то странное. Я возвращаю результат Json к моему представлению, чтобы отображать данные о вызовах ajax. И я пытаюсь показать небольшое сообщение, если моя data.length == 0

Нет данных для этого критерия

Также я использую $.blockUI (говорят, пожалуйста, подождите), и когда моя data.length = 0, моя страница остается сказать, пожалуйста, подождите... на века, и когда я запустил это в firefox, я получил сообщение

Сценарий на этой странице может быть занят или может перестать отвечать

Мой взгляд:

   <script type="text/javascript">

//<![CDATA[

$("#GetReport").click(function () {
    $.blockUI({
        css: {
            border: 'none',
            padding: '15px',
            backgroundColor: '#000',
            '-webkit-border-radius': '10px',
            '-moz-border-radius': '10px',
            opacity: .5,
            color: '#fff'
        }
    });

    $.ajax({
        type: "POST",
        url: theUrl,
        data: { 'manufacturer': manufacturer, 'country': country, 'category': category, 'startDate': startDate, 'endDate': endDate, 'chartType': chartType },
        dataType: "json",
        success: function (data) {
            //setTimeout($.unblockUI, 5);
            var retailerNameArray = [];
            var clicksArray = [];
            var weekNoArray = [];
            var rowTotalArray = [];
            var weekArray = [];
            var columnTotalArray = [];
            var cumTotalArray = [];
            var weekCounterArray = [];
            var overallClickCountArray = [];
            var resellerShareArray = [];
            var retailerCount = 0;

            //we want to include total in the chart
            var weekNoArrayIncTotal = [];
            var retailerNameArrayIncTotal = [];
            var clicksArrayIncTotal = [];
            var totalWeekCounter;

            var weekNumberIncTotal = 0;
            var counter = 1;
            //if there is no data we do not want to display the graph etc

            if (data.length == 0) {

                $('#noData').show();
                $('#chartContainer').hide();
                $('#tableContainer').hide();
                $('.exportData').hide();
            }

            //we need to add one more because of total but then 0 it


            for (var i = 0; i < data.length; i++) {
                var cumLeadrow = data[i];
                // var y = 1;
                //Only display on graph if not 0

        }
    });

});

//]]>

Нет данных для указанных критериев

Как всегда, любая помощь была бы высоко оценена.

  • 0
    В коде есть несколько ошибок синтаксиса. Не могли бы вы исправить их (в вызове ajax отсутствует a }) а в обработчике успеха отсутствует a } а в вашем обработчике кликов также отсутствует }
  • 0
    @Rune Fs извините, я копировал весь вид, так как он слишком большой, я скопирую его
Показать ещё 2 комментария
Теги:
asp.net-mvc

1 ответ

2
Лучший ответ

если либо data.length - l либо data.length - cc меньше 0, ваш скрипт будет работать вечно.

Когда вы разместили полный код, у вас был набор циклов while, как показано ниже

while (typeof weekCounterArray[data.length - l] == 'undefined') {
   l++
}

если когда-либо data.length - l < 0 то он останется отрицательным, и любой массив, индексированный с отрицательным числом, даст undefined результат, который приведет к тому, что цикл будет выполняться навсегда (практически, поскольку он будет в какой-то момент переполнен и вернется к допустимому диапазону если они существуют в какой-то момент)

это произойдет в двух разных случаях. Вероятнее всего, что data.length == 0 поскольку l инициализируется 1 это приведет к отрицательному индексу. Другой менее вероятный сценарий - это когда индексируемый массив имеет неопределенные значения от индекса 0 до индекса data.length-1 Например [undefined,undefined,1,2,3,4] приведет к практически бесконечному циклу для data.length == 2

  • 2
    Вы можете быть более ясным извините, я не понял, что вы подразумеваете под data.length-l amd data.length - cc
  • 0
    @AchieveSolution - это оба фрагмента кода, см. Обновление для дополнительных пояснений.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню