Я знаю, что эта тема старая, но я дам еще один подход, который я нашел и ранее описал здесь здесь . В основном я использую ASP.MVC с WIF (но это не очень важно для контекста этой темы - ответ адекватен независимо от того, какие рамки используются. Указание остается неизменным - решение проблем, связанных с ошибками аутентификации, в то время как выполнение запросов ajax) .
Подход, показанный ниже, может быть применен ко всем запросам ajax из коробки (если они явно не переопределяют событие beforeSend).
$.ajaxSetup({
beforeSend: checkPulse,
error: function (XMLHttpRequest, textStatus, errorThrown) {
document.open();
document.write(XMLHttpRequest.responseText);
document.close();
}
});
Перед выполнением любого запроса ajax CheckPulse
(метод контроллера, который может быть чем-то простейшим):
[Authorize]
public virtual void CheckPulse() {}
Если пользователь не аутентифицирован (токен истек), такой метод не может быть доступен (защищен атрибутом Authorize
). Поскольку структура обрабатывает аутентификацию, а токен истекает, он передает HTTP-статус 302 в ответ. Если вы не хотите, чтобы ваш браузер обрабатывал 302 ответ прозрачно, поймайте его в Global.asax и измените статус ответа - например, до 200 OK. Кроме того, добавьте заголовок, в котором вам будет предложено обработать такой ответ особым образом (позже на стороне клиента):
protected void Application_EndRequest()
{
if (Context.Response.StatusCode == 302
&& (new HttpContextWrapper(Context)).Request.IsAjaxRequest())
{
Context.Response.StatusCode = 200;
Context.Response.AddHeader("REQUIRES_AUTH", "1");
}
}
Наконец, на стороне клиента проверьте такой пользовательский заголовок. Если присутствует - необходимо выполнить полное перенаправление на страницу входа в систему (в моем случае window.location
заменяется URL-адресом из запроса, который автоматически обрабатывается моей каркасом).
function checkPulse(XMLHttpRequest) {
var location = window.location.href;
$.ajax({
url: "/Controller/CheckPulse",
type: 'GET',
async: false,
beforeSend: null,
success:
function (result, textStatus, xhr) {
if (xhr.getResponseHeader('REQUIRES_AUTH') === '1') {
XMLHttpRequest.abort(); // terminate further ajax execution
window.location = location;
}
}
});
}
NSXMLParser синтаксический анализатор SAX , означая, что он ступает через XML-документ и сообщает Вам (через методы делегата) различных событий (такие как запуск xml узла, нахождение атрибутов, и т.д.). Этот тип обработки XML является лучшим для парсинга огромных документов, и когда только необходимо получить крошечный объем данных из большого файла.
В отличие от SAX модель DOM, где все дерево XML анализируется в память (обычно с единственным вызовом), и затем можно свободно исследовать XML-документ от представленного API. Это обычно намного легче работать с, поскольку Вы получаете произвольный доступ ко всему xml документу.
, Таким образом, первым вопросом, на который нужно ответить, является SAX по сравнению с вопросом DOM. Если Вы - woring с большими XML-файлами (скажите, что 10 МБ или больше), можно хотеть придерживаться SAX. Если Вы работаете с небольшими XML-файлами или крошечными фрагментами XML, часто намного легче использовать DOM.
, Если действительно Вы решаете пойти с DOM, у Вас есть несколько опций.
libxml2 является очень мощный API, записанный в C. Это главным образом для использования стиля DOM, но имеет другие опции, если Вы становитесь опытными с ним. Но, поскольку это записано в C, это не часто привлекательно для более знакомых с Objective C (объекты и автовыпуск), или тех, которые прибывают законченный из мира .NET. Таким образом существует потребность/требование в собственной обертке Objective C вокруг libxml для создания этого более знакомым. TouchXML является одной такой оберткой. Это работает хорошо, если Вам только нужен доступ для чтения к XML. Если бы Вы хотите изменить XML или создать фрагменты/документы XML с нуля, я рекомендовал бы идти с KissXML.
См. Учебник по XML для iOS: Как выбрать лучший парсер XML для вашего проекта iPhone:
Существует множество вариантов, когда дело доходит до парсинга XML на iPhone. iPhone SDK поставляется с двумя различными библиотеками на выбор, также есть несколько популярных библиотек сторонних разработчиков, таких как TBXML, TouchXML, KissXML, TinyXML и GDataXML. Как разработчику выбрать лучший парсер XML для своего проекта?
Недавно я рассматривал различные варианты, и в итоге расширил образец XMLPerformance от Apple, чтобы опробовать каждую из вышеперечисленных библиотек, чтобы узнать, как они работают, и сравнить их производительность. Я решил поделиться тем, что мне удалось узнать, с теми, кто, возможно, ищет лучшую библиотеку XML для своего проекта iPhone.
В этом учебнике по XML мы подробно сравним возможности и производительность самых популярных библиотек для iPhone, объясним, как выбирать между ними, и приведем пример проекта, показывающего, как читать XML-данные с помощью каждой из вышеперечисленных библиотек...