2010-10-05 1 views
3

Я отправляю запрос с данными POST на веб-сервер. Веб-сервер возвращается с ответом JSON в случае ошибки или самих файлов данных, если ошибок нет.Отслеживание загрузки ответа на запрос ASIFormDataRequest

Я хотел бы отслеживать ход ответа на данные файла. Мой код основан на коде образца из ASIHttpRequest Tutorial

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

[request setPostValue:someValue forKey:@"someKey"]; 
[request setPostValue:someOtherValue forKey:@"someOtherKey"]; 
[request setShowAccurateProgress:YES]; 
[request setDownloadProgressDelegate:aProgressView]; 

request.delegate = self; 
[request startSynchronous]; 

Ничего не происходит до полного ответа не существует, и в этом случае индикатор заполняется полностью.

Я экспериментировал как с синхронными, так и с асинхронными запросами.

Я полагаю, что делегат процесса загрузки не работает, потому что я не загружаю файл как таковой, а просто получаю ответ HTTP на запрос, верно? Каким будет правильный подход для отслеживания прогресса в этом случае?

Заранее спасибо ...

ответ

1

Вы используете этот код в главном потоке?

Если это так, то причина, по которой прогресс не обновляется, заключается в том, что использование синхронного запроса будет блокировать основной поток, предотвращая появление обновлений пользовательского интерфейса.

Лучшее решение для этого - использовать асинхронный запрос - вы упомянули, что вы пробовали это, что случилось?

Совет:

ответ Печать HTTP и проверить, если у вас есть Content-Length. Если нет, или это 0, это проблема.

NSLog(@"Response headers %@",[request responseHeaders]); 
+0

Это была моя первая идея, но и запросы async и sync приводят к аналогичному поведению. даже во время асинхронного запроса метод updateProgress никогда не вызывается до тех пор, пока весь ответ не будет получен. –

+3

Другая возможность была бы, если сервер не возвращает заголовок Content-Length: тогда ASIHTTPRequest не имеет способа узнать, что такое общий размер загрузки, поэтому не может сообщить процент завершения. Там также известна ошибка в apache, когда она может сообщать о неправильном размере для сжатых ответов, поэтому ASIHTTPRequest отключает отчет о ходе работы в этом случае. Если вы добавите полные заголовки ответа HTTP от ответа в свой вопрос, который может сделать возможным диагностировать. – JosephH

+0

Большое спасибо Джозефу. Content-Length не был установлен действительно. Серверные ребята исправили его, и он работает так, как ожидалось сейчас! –

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

  • Нет связанных вопросов^_^