Можете ли вы использовать XMLHttpRequest для отслеживания большого цикла обновления SQL в исходном коде

#javascript #jquery #ajax #xmlhttprequest

#javascript #jquery #ajax #xmlhttprequest

Вопрос:

Я разрешаю конечным пользователям загружать файл, затем считывать в память и выполнять цикл через него для обновления данных. Мне интересно, как я могу сообщать о ходе выполнения цикла SQL, который я выполняю на C #, обратно в пользовательский интерфейс, точно так же, как мы делаем для загрузки файла. Мы используем ajax POST, затем читаем по строкам, поэтому при выполнении больших операций чтения мне нужен статус выполнения того, сколько строк мы прочитали. Возможно ли это, или это работает только с потоками загрузки файлов.

Вот вызов ajax, который выполняет загрузку файла, и пока AJAX ожидает ответа, прогресс файла отлично работает для загружаемого файла, но не для отслеживания цикла.

  var form = $('#FormUpload')[0];
        var dataString = new FormData(form);

        $("#cboxClose").trigger("click");

        $.ajax({
            url: '/Uploader/Upload',  //Server script to process data
            type: 'POST',
            xhr: function () {  // Custom XMLHttpRequest
                var myXhr = $.ajaxSettings.xhr();
                if (myXhr.upload) { // Check if upload property exists
                    //myXhr.upload.onprogress = progressHandlingFunction
                    myXhr.upload.addEventListener('progress', progressHandlingFunction,
                        false); // For handling the progress of the upload
                }
                return myXhr;
            },
            //Ajax events
            success: uploadSuccessHandler,
            error: uploadErrorHandler,
            //complete: completeHandler,
            // Form data
            data: dataString,
            //Options to tell jQuery not to process data or worry about content-type.
            cache: false,
            contentType: false,
            processData: false
        });
    }
  

Вот часть контроллера C # из MVC, который я вызываю, но я ограничил и сделал логику общей для целей этого вопроса.

  try
        {
            if (uploadedFile != null amp;amp; uploadedFile.ContentLength > 0)
            {
                if (uploadedFile != null)
                {
                    if (uploadedFile.ContentLength > 0)
                    {

                        using (StreamReader sr = new StreamReader(uploadedFile.InputStream))
                        {
                            string currentLine;
                            int counterLine = 0;
                            // currentLine will be null when the StreamReader reaches the end of file
                            while ((currentLine = sr.ReadLine()) != null)
                            {
                                if (counterLine > 0)
                                {

                                    String fixedLine = currentLine;

                                    if (currentLine.Contains("/"))
                                    {
                                        fixedLine = currentLine.Remove('/');
                                    }

                                    string[] columns = fixedLine.Split(',');

                                    quoteDataRows.Add(new QuoteEntityItemVM()
                                    {
                                        Manufacturer = columns[0],
                                        Model = columns[2],
                                        Description = columns[1],
                                        LineID = lineCountId  = 1

                                    });
                                }

                                counterLine  = 1;
                            }
                        }
                   }
             }
  

Есть ли способ, которым я могу использовать современный AJAX, чтобы не только показывать прогресс uplaod, но и в то время как циклы счетчика сообщают о прогрессе в пользовательском интерфейсе что-то вроде («Строки прочитаны (n) из общей строки (n)» обратно в пользовательский интерфейс, или это невозможно?

-Спасибо-

Комментарии:

1. Вы могли бы отправить запрос в свой api, чтобы проверить, сколько строк было прочитано. Или вы могли бы настроить websocket code.msdn.microsoft.com/HTML-5-Web-Socket-e679d61d

2. Как мне отправить запрос в API и сообщить об этом, если он находится в другом вызове? не могли бы вы привести базовый пример? Это, вероятно, прямолинейно, и я просматриваю это.

3. На самом деле, мне нравится метод веб-сокета, и я забыл об этом сейчас в HTML5. Спасибо и попробую это. Опубликую ответ, если я его разрешу.

4. Я не уверен, как бы я отправил обратно целочисленное количество в пользовательский интерфейс, используя показ примера веб-сокета. Я вижу, что вы создаете с контекстом, но как мне передать событие «Message» в моем цикле c # для обратной записи в сокет?

5. К сожалению, c # выходит за рамки моей компетенции, в java вы бы вызвали объект из текущего сеанса для передачи сообщения, в c # это должно быть аналогично. Вам следует взглянуть на официальную документацию.