onComplete в AjaxUpload перед попаданием кода на стороне сервера - PullRequest
3 голосов
/ 29 мая 2020

Я работаю над некоторым устаревшим кодом, который использует Asp. net и ajax, где мы выполняем одну функцию для загрузки PDF-файла. Для загрузки файла в нашем устаревшем коде используется AjaxUpload, но я наблюдал странное поведение AjaxUpload, когда событие onComplete вызывается до того, как фактический файл был загружен кодом на стороне сервера из-за этого, хотя файл был загружен успешно, пользователь все равно получает сообщение об ошибке на экране, говорящее Загрузка не удалась.

И вот что самое странное - тот же код работал нормально до прошлой недели.

Код:

initFileUpload: function () {
      debugger;
  new AjaxUpload('aj-assetfile', {
    action: '/Util/FileUploadHandler.ashx?type=asset&signup=False&oldfile=' + assetObj.AssetPath + '&as=' + assetObj.AssetID,
    //action: ML.Assets.handlerPath + '?action=uploadfile',
    name: 'AccountSignupUploadContent',
    onSubmit: function (file, ext) {
      ML.Assets.isUploading = true;

      ML.Assets.toggleAsfMask(true);

      // change button text, when user selects file         
      $asffile.val('Uploading');
      $astfileerror.hide();

      // If you want to allow uploading only 1 file at time,
      // you can disable upload button
      this.disable();

      // Uploding -> Uploading. -> Uploading...
      ML.Assets.interval = window.setInterval(function () {
        var text = $asffile.val();
        if (text.length < 13) {
          $asffile.val(text + '.');
        } else {
          $asffile.val('Uploading');
        }
      }, 200);

      //if url field block is visible 
      if ($asseturlbkl.is(':visible')) {
        $asfurl.val(''); //reset values of url
        $asfurl.removeClass('requiref error'); //remove require field class              
        $asfurlerror.hide(); //hide errors
      }
    },
      onComplete: function (file, responseJSON) {
          debugger;
      ML.Assets.toggleAsfMask(false);
      ML.Assets.isUploading = false;
      window.clearInterval(ML.Assets.interval);
      this.enable();

      var success = false;
      var responseMsg = '';
      try {
        var response = JSON.parse(responseJSON);
        if (response.status == 'success') { //(response.getElementsByTagName('status')[0].textContent == 'success') {            
          success = true;
        } else {
          success = false;
          responseMsg = ': ' + response.message;
        }
      } catch (e) {
        success = false;
      }

      if (success) {
        assetObj.AssetMimeType = response.mimetype;
        $asffile.val(response.path);
        $asffile.valid(); //clear errors
        ML.Assets.madeChanges();

        if (ML.Assets.saveAfterUpload) { //if user submitted form while uploading              
          ML.Assets.saveAsset(); //run the save callback              
        }
      } else { //error
        assetObj.AssetMimeType = "";
        $asffile.val('');
        $astfileerror.show().text('Upload failed' + responseMsg);
        //if url field block is visible  and type is not free offer.  
        if ($asseturlbkl.is(':visible') && this.type !== undefined && assetObj.AssetType != this.type.FREEOFFER) {
          $asfurl.addClass('requiref'); //remove require field class
        }
        ML.Assets.hideLoader();
      }
    }
  });
}

1 Ответ

2 голосов
/ 02 июня 2020

Я столкнулся с той же проблемой, но я исправил ее с помощью небольшого изменения в плагине.

Когда «iframeSrc» установлено на «javascript: false» на https- или http-страницах, Chrome теперь кажется отменяет запрос. Изменение этого параметра на «about: blank» , похоже, решает проблему.

Старый код:

var iframe = toElement('<iframe src="javascript:false;" name="' + id + '" />');

Новый код с изменениями:

var iframe = toElement('<iframe src="about:blank;" name="' + id + '" />');

После смены кода работает нормально. Надеюсь, это сработает и для вас. :)

Справка (подробнее): https://www.infomazeelite.com/ajax-file-upload-is-not-working-in-the-latest-chrome-version-83-0-4103-61-official-build-64-bit/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...