2012-06-18 3 views
0

Я работаю над приложением iOS, которое отображает веб-страницу через UIWebView. На странице содержится от 20 до 40 кнопок. Каждый отправляет на сервер запрос ajax. Он работает по большей части, но сервер является настольным приложением и может закрываться в любой момент по любой причине без предупреждения. С помощью этих запросов ajax на пользователя не выводится вывод, поэтому, если сервер опустился, пользователь понятия не имел. Я хотел бы получить уведомление о тайм-ауте ajax, а затем дать пользователю возможность либо повторить попытку, либо вернуться на главный экран. Кажется, я не могу найти способ оповестить UIWebView о любых неудачных аякс-запросах.Тайм-аут Ajax в UIWebView

Сначала я подумал, что могу просто использовать метод webView:didFailLoadWithError:UIWebViewDelegate, но, видимо, он не уведомлен о неудачных аякс-запросах.

Любые предложения высоко оценили

+0

с помощью JavaScript, вы можете добавить процедуру таймаута, чтобы проверить его или JQuery функция Ajax работает хорошо. – Tom

ответ

2

Если при возникновении неисправности, есть JavaScript код, который вызывается в обработчиках отказа Ajax, что делает изменение location.href то UIWebViewDelegate shouldStartLoadWithRequest: метод будет вызван, давая вам шанс что-то сделать, когда есть провал. т.е.

В Ajax тайм-аута кода обработки:

window.location.href = "myscheme://AjaxFailure"; 

В вашем UIWebViewDelegate код обработки:

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSLog(@"shouldStartLoadWithRequest: url: %@", [[request URL] absoluteString]); 
    NSURL *URL = request.URL; 
    if ([URL.scheme isEqualToString:@"myscheme"]) 
    { 
    ... notify the user there was an error 
+0

URL никогда не меняется. Запросы ajax делают изменения на сервере, но ничего, что измеримо с клиентской стороны – nick

+1

Я думаю, вы неправильно поняли мой ответ? Если в коде обработки времени ожидания Ajax вы выполняете вызов location.href, как я показал выше, тогда он уведомит ваш код Objective-C, что произошла ошибка, и дает вам возможность уведомить пользователя, чтобы они могли попробовать еще раз или пойти вернуться на главный экран. Это единственный способ вернуть ошибку Ajax обратно в код Objective-C, который реализует делегат UIWebView и UIWebView. Я сделал пару небольших настроек к описанию в ответе, чтобы, надеюсь, уточнить немного лучше. – Gruntcakes

+0

, что имеет смысл сейчас. Спасибо, что отлично работает! благодаря – nick

Смежные вопросы