Тайм-аут NSURLProtocol с AJAX

Я использую NSURLProtocol для добавления пользовательского заголовка ко всем запросам, исходящим из UIWebview. В этом WebView при выполнении определенной операции вызов AJAX запускается для отображения сообщения. Эта операция для отображения сообщения использует AJAX и всегда истекает, когда я использую метод NSURLProtocol. Он отлично работает без NSURLProtocol.

Дайте мне знать, если нужна дополнительная информация. Вот мой код.

+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
    if ([NSURLProtocol propertyForKey:kUserAgentKey inRequest:request] != nil)
        return NO;

    return YES;
}

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
{
    return request;
}

- (void)startLoading
{
    NSMutableURLRequest *newRequest = [self.request mutableCopy];


     NSString *  customAgent = @"CustomeHeaderValue";
    [newRequest setValue:customAgent forHTTPHeaderField:kUserAgentKey];

    [NSURLProtocol setProperty:@YES forKey:kUserAgentKey inRequest:newRequest];
    self.connection = [NSURLConnection connectionWithRequest:newRequest delegate:self];


}
- (void)stopLoading
{
    [self.connection cancel];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.client URLProtocol:self didLoadData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    [self.client URLProtocol:self didFailWithError:error];
    self.connection = nil;
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{`enter code here`

    [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [self.client URLProtocolDidFinishLoading:self];
    self.connection = nil;
}

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
    if (response) {
           [[self client] URLProtocol:self wasRedirectedToRequest:request redirectResponse:response];
    }

    return request;
}

person Aditya Gaonkar    schedule 12.03.2015    source источник
comment
Является ли запрос AJAX синхронным?   -  person hly    schedule 27.03.2015
comment
Да, в самом деле. Создание асинхронности помогло. Но что, если веб-разработчики по каким-то внутренним причинам не могут сделать AJAX асинхронным?   -  person Aditya Gaonkar    schedule 30.07.2015
comment
@AdityaGaonkar, вы решили проблему с запросами на синхронизацию?   -  person nexuzzz    schedule 25.09.2015


Ответы (1)


попробуй реализовать этот метод

-(NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response{
[self.client URLProtocol:self wasRedirectedToRequest:request redirectResponse:response];
return request;
}
person John Shaw    schedule 24.12.2015
comment
Это не сработало для меня. Наконец веб-разработчики согласились сделать AJAX асинхронным. Я считаю, что это правильный способ сделать это. Однако я попытался явно запустить NSURLConnection в основном потоке, и он работал по какой-то неизвестной причине, хотя AJAX синхронен. - person Aditya Gaonkar; 25.12.2015