TypeScript: вызов Ajax всегда вызывает ошибку, а не успех в случае успеха - PullRequest
0 голосов
/ 04 мая 2018

В машинописи у меня есть класс 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 голосов
/ 04 мая 2018

В вашем обработчике ошибок вы не передали все параметры, поэтому вы только проверяете, успешно ли завершился запрос. Однако после этого могут возникать ошибки, например, при обработке ответа. Вы можете обрабатывать ошибки лучше, как это:

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.

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