TypeScript:Ajax调用总是在成功时调用Error而不是成功

时间:2018-05-04 07:20:38

标签: javascript jquery ajax asp.net-mvc typescript

在typescript中我有一个DataAccess类,所以所有Ajax调用都通过一个对象进行路由,以便在我的应用程序中的很多地方保存代码的重复。

在使用这种方法时,我需要使用回调来将响应返回给调用类,以便相应地处理成功和错误。

这是打字稿

 ajaxCall(retVal, retError) {

        $.ajax({
            type: this.callType,
            data: this.dataObject,
            dataType: this.dataType,
            url: this.url,
            contentType: this.contentType,
            traditional: this.traditional,
            async: this._async,
            error:  retError,
            success: retVal
        });
    }

这是已编译的Javascript

AjaxDataAccessLayer.prototype.ajaxCall = function (retVal, retError) {
   $.ajax({
   type: this.callType,
   data: this.dataObject,
   dataType: this.dataType,
   url: this.url,
   contentType: this.contentType,
   traditional: this.traditional,
   async: this._async,
   error: retError,
   success: retVal
  });
};
return AjaxDataAccessLayer;

这完全可以很好地调用ASP.Net MVC控制器,但是我遇到的问题是无论成功还是错误,回调都是retError。

这是调用Typescript

var _this = this;
        var dataAccess = new DataAccess.AjaxDataAccessLayer(Fe.Upsm.Enums.AjaxCallType.Post,
            Fe.Upsm.Enums.AjaxDataType.json,
            "../../PrintQueue/DeletePrintQueueItems",
            jsonObj);

        dataAccess.ajaxCall(data => {
            // success
            new Fe.Upsm.Head().showGlobalNotification("Selected Items Deleted");
            _this.refreshPrintQueueGrid();
            (window as any).parent.refreshOperatorPrintQueueCount();
        }, xhr => {
            // failure
            alert("An Error Occurred. Failed to update Note");
        });

当单步执行并查看此状态时状态正常且响应为200.

enter image description here

所以,问题(如上所述)总是调用xhr \ retError而不管成功与否。

问题:如何让它进入正确的回叫?

1 个答案:

答案 0 :(得分:2)

在错误处理程序中,您没有传递所有参数,因此您只检查请求是否成功完成。但是,之后可能会出现错误,例如处理响应时。你可以处理更好的错误:

dataAccess.ajaxCall(data => {
    // success
    new Fe.Upsm.Head().showGlobalNotification("Selected Items Deleted");
    _this.refreshPrintQueueGrid();
    (window as any).parent.refreshOperatorPrintQueueCount();
}, (xhr, errorText, errorThrown => {
    // failure
    console.log(xhr, errorTest, errorThrown);
    alert("An Error Occurred. Failed to update Note");
});

基于使用此方法的发现,错误是您的控制器返回空响应,因此当jQuery尝试解析它们时您将获得异常,因为空字符串不是有效的JSON。