2010-10-05 43 views
3

我正在將POST數據發送到Web服務器。 Web服務器在發生錯誤時返回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

您是否在主線程中運行此代碼?

如果是這樣,進展不更新的原因是使用同步請求將阻止主線程,防止發生UI更新。

最好的解決方法是使用異步請求 - 你提到你已經嘗試過,發生了什麼?

提示:

打印的HTTP響應,並檢查是否有內容長度。如果沒有,或者它是0,那就是問題所在。

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

這也是我的第一個想法,但是異步和同步請求都會導致類似的行爲。即使在異步請求期間,updateProgress方法也不會被調用,直到收到整個響應。 – 2010-10-10 14:12:02

+3

另一種可能性是,如果服務器沒有返回Content-Length:頭 - 那麼ASIHTTPRequest無法知道下載的總大小,所以無法報告完成百分比。在apache中還有一個已知的bug,它可以報告壓縮響應的大小錯誤,所以ASIHTTPRequest在這種情況下禁用進度報告。如果您將來自響應的HTTP響應的完整標題添加到您的問題中,這可能會使診斷成爲可能。 – JosephH 2010-10-10 15:56:43

+0

非常感謝約瑟夫。內容長度確實沒有被設置。服務器人員修復了它,它現在按預期工作! – 2010-10-13 13:23:04