2012-06-18 43 views
0

我正在研究通過UIWebView顯示網頁的iOS應用程序。該頁面包含20到40個按鈕。每個人都會向服務器發送一個ajax請求。它大部分工作,但服務器是一個桌面應用程序,並可能出於任何原因在任何時候關閉,沒有任何警告。有了這些ajax請求,就不會有輸出顯示給用戶,所以如果服務器出現故障,用戶將不知道。我希望能夠通知ajax超時,然後讓用戶選擇重試或返回主屏幕。我似乎無法找到通知UIWebView任何失敗的ajax請求的方法。UIWebView中的Ajax超時

起初我以爲我可以簡單地使用UIWebViewDelegatewebView:didFailLoadWithError:方法,但顯然它沒有通知失敗的ajax請求。

任何建議都非常讚賞

+0

通過使用JavaScript,你可以添加一個暫停程序來查看或jQuery的AJAX功能也適用精細。 – Tom

回答

2

如果發生故障時,有可能是在您的阿賈克斯故障處理程序調用JavaScript代碼,使一個location.href變化,則UIWebViewDelegate shouldStartLoadWithRequest:方法將被調用,給你每當出現故障時都有機會做某事。即

在阿賈克斯超時處理代碼:

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

網址永不改變。 ajax請求在服務器上進行了更改,但從客戶端無法衡量 – nick

+1

我認爲您誤解了我的回覆?如果阿賈克斯超時處理代碼你這樣做,因爲我已經證明以上則location.href調用,將通知您的Objective-C代碼,有一個錯誤,給你通知用戶的機會,使他們可以再試一次,或去回到主屏幕。這是將Ajax錯誤傳遞迴實現UIWebView和UIWebView委託的Objective-C代碼的唯一方法。我在回覆中對描述做了一些小的調整,希望能更好地澄清。現在有意義的 – Gruntcakes

+0

。謝謝,這很好用!謝謝 – nick