使用AngularJs的$http服务将一个文件发送到ASP.. NET MVC控制器显示"$摘要已经在进行中



我正在尝试使用AngularJS $http post发布excel文件,并在控制台获得以下错误- "$digest已经在进行中"。

Error: [$rootScope:inprog] $digest already in progress
http://errors.angularjs.org/1.4.3/$rootScope/inprog?p0=%24digest
at beginPhase (http://localhost:19394/Scripts/angular.js:16200:9)
at Scope.prototype.$apply  (http://localhost:19394/Scripts/angular.js:15944:11)
at Anonymous function   (http://localhost:19394/app/core/core.directives.js:50:21)
at jQuery.event.dispatch (http://localhost:19394/Scripts/jquery-  2.1.4.js:4434:6)
at elemData.handle (http://localhost:19394/Scripts/jquery-2.1.4.js:4120:5)

我的脚本如下,

      var fdata = new FormData();
      fdata.append('file', file);
        $http({
            url: url,
            method: 'POST',
            data: fdata,
            withCredentials: true,
            headers: { 'Content-Type': undefined, 'X-Requested-With': 'XMLHttpRequest' },
            transformRequest: angular.identity
        });

我的控制器动作如下,

    [HttpPost]
    public ActionResult SaveAccounts(HttpPostedFileBase file)
    {
     }

通过使用上面的代码,我能够上传文件,但等待一段时间后(说2-3分钟上传将不工作)。每次成功上传后,我们都可以看到上面的控制台错误。成功事件和错误事件被触发,但是完整事件没有被触发。

谁来告诉我我做错了什么?

一般来说,修复一个已经在进行中的摘要错误的最好方法是使用AngularJS提供的$timeout函数,这是AngularJS工作人员推荐的,之所以这样做是因为AngularJS的$timeout函数也会在下一个摘要中运行它内部的任何内容,即使时间没有传递给$timeout,隔离程序崩溃的区域。这通常是一个$apply或类似的东西。

$timeout(function() {
  $scope.someData = someData; //Whatever needs to happen next in here
}, 0);

AngularJS文档非常准确地给出了常见的原因

最新更新