Почему вызов прерывается () на ошибке причины запроса ajax в ASP.NET MVC (IE8)

Я использую jQuery для регистрации на действие контроллера MVC, которое возвращает таблицу информации. Пользователь страницы инициировал это путем нажимания на различные ссылки.

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

Я нашел, что, когда я делаю это (хотя его штраф от POV клиента) я получу ошибки на веб-приложении, говоря это

"The parameters dictionary contains a null entry for parameter srtCol of non-nullable type 'System.Int32'"

Теперь сообщение ajax определенно передает во всех параметрах, и если я не пытаюсь отменить запрос ajax, что это работает просто великолепно.

Но если я действительно отменяю запрос путем вызова аварийного прекращения работы () на объекте XMLHttpRequest, что ajax () возвраты, прежде чем это закончится, я получаю ошибку от ASP.NET MVC.

Пример:

//Cancel any pevious request
if (req)
{
    req.abort();
    req = null;
}

//Make new request
req = $.ajax({
    type: 'POST',
    url: "/Myapp/GetTbl",
    data: {srtCol: srt, view: viewID},
    success: OnSuccess,
    error: OnError,
    dataType: "html"
});

Я заметил, что это только происходит, IE8. В FF это кажется не cuase проблема.

Кто-либо знает, как отменить запрос ajax в IE8, не вызывая ошибки для MVC?

Спасибо за любую справку.

7
задан gevorg 12 June 2016 в 21:06
поделиться

1 ответ

IE может отправлять часть тела запроса на сервер перед прерыванием, давая серверу достаточно запроса для начала обработки, но не все параметры, которые ему нужны. Вы можете проверить это, посмотрев на активность IE в прокси-сервере (например, fiddler ) - если вы получили часть запроса, значит IE плохо обрабатывает abort () . В этом случае вы можете позволить завершиться старому запросу AJAX и просто запретить его OnSuccess выполнять какие-либо действия, а не прерывать его.

РЕДАКТИРОВАТЬ:

var req; // current/latest request

var OnSuccess = function(data, textStatus, XMLHttpRequest) {
    if (XMLHttpRequest != req) return;
    // latest request has succeeded
}

req = $.ajax(...);

Сохраняйте ссылку на последний запрос, как вы делаете сейчас, но не прерывайте его. Вместо этого OnSuccess проверяет, совпадает ли переданный ему объект запроса с «последним запросом»; если они разные, то вмешался другой запрос, и он прошел.

3
ответ дан 7 December 2019 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: