Ловля 302 НАЙДЕННЫХ в JavaScript

В вашем коде у вас есть:

excel.Workbooks.Open(...)

excel.Workbooks создает COM-объект. Затем вы вызываете функцию Open из этого COM-объекта. Однако вы не освобождаете COM-объект, когда вы закончили.

Это обычная проблема при работе с COM-объектами. В принципе, в вашем выражении никогда не должно быть более одной точки, потому что вам нужно будет очистить COM-объекты, когда вы закончите.

Тема просто слишком велика, чтобы полностью исследовать ответ, но Я думаю, вы найдете статью Джейка Гиннивана по этому вопросу чрезвычайно полезной: VSTO и COM Interop

Если вы устали от всех вызовов ReleaseComObject, вы можете найти этот вопрос полезным: Как правильно очистить объект взаимодействия Excel в C #, редакция 2012 года

36
задан Andrzej Doyle 4 November 2009 в 11:19
поделиться

3 ответа

Принятый ответ не работает по указанным причинам. Я разместил комментарий со ссылкой на вопрос, в котором описывается хакерство, позволяющее обойти проблему прозрачной обработки 302 браузером:

Как управлять запросом перенаправления после вызова jQuery Ajax

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

22
ответ дан 27 November 2019 в 06:19
поделиться
function doAjaxCall() {
   $.ajaxSetup({complete: onRequestCompleted});
   $.get(yourUrl,yourData,yourCallback);
}

function onRequestCompleted(xhr,textStatus) {
   if (xhr.status == 302) {
      location.href = xhr.getResponseHeader("Location");
   }
}
-5
ответ дан Strelok 27 November 2019 в 06:19
поделиться

Я так не думаю. В W3C сказано, что перенаправления HTTP с определенными кодами состояния, включая 302, должны выполняться прозрачно. Цитата ниже:

Если ответ представляет собой перенаправление HTTP (код состояния 301, 302, 303 или 307), тогда он ДОЛЖЕН прозрачно соблюдаться (если он не нарушает меры безопасности или бесконечного цикла). Любая другая ошибка (включая 401) ДОЛЖЕН заставлять объект использовать эту страницу с ошибкой в ​​качестве ответа.

В качестве эксперимента я попытался выполнять запросы Ajax из различных браузеров (Firefox 3.5, Chrome, IE8, IE7, IE6) на сервер, выдающий код состояния 302 , и отображение статуса в объекте запроса браузера. В каждом случае получалось 200.

6
ответ дан 27 November 2019 в 06:19
поделиться
Другие вопросы по тегам:

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