【问题标题】:Using asihttprequest to fetch data based on http status code使用 asihttprequest 根据 http 状态码获取数据
【发布时间】:2012-01-15 09:42:45
【问题描述】:

每次发生变化时,我都会尝试将我的 iOS 应用程序连接到来自我的网络服务的 GET 数据。我目前的实现是使用 NSTimer 并执行 ASIHttpRequest 但我不喜欢那个轮询实现。有没有更好的方法?

我正在考虑启动请求并让它继续尝试,直到 Web 服务状态代码变为 OK(状态 200)或者可能是“已修改”状态代码。我将如何在视图控制器中执行此操作?

这是我目前所拥有的:

self.asiRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:self.barcodeUrl]];
[self.asiRequest setDelegate:self];
[self.asiRequest startAsynchronous];
[self.asiRequest addRequestHeader:@"Accept" value:@"application/json"];
[self.asiRequest addRequestHeader:@"Content-Type" value:@"application/json"];
int statusCode = [self.asiRequest responseStatusCode];

我知道如果请求成功,委托方法- (void)requestFinished:(ASIHTTPRequest *)request

我想我的问题是,如何保持打开的 ASIHttpRequest 以便当 Web 服务返回“已修改”时,它会调用 GET 请求,然后再次保持打开的连接?这必须是异步的,并且不能在 UI 线程上运行,因为我不想让我的应用程序挂起。

非常感谢!

【问题讨论】:

    标签: ios web-services asihttprequest polling


    【解决方案1】:

    无需在客户端做太多操作的最简单方法是让您的 Web 服务在返回“已修改”时发送一个 Location: 标头,指向您想要的 URL GET与新内容。如果要监视的 URL 取决于例如用户 ID 或您所在应用的区域,制作一个监控脚本,您可以在其中传入 GET 参数来配置返回“修改”时应返回给您的确切 URL。

    然后ASIHTTPRequest 将自动GETLocation: 的内容,您可以再次将requestFinished: 中的内容重新安排到监视器URL,知道响应(如果不为空/“未修改”)将始终是新数据,因为重定向到新数据发生在幕后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2011-02-26
      • 2019-07-04
      • 2010-11-24
      • 1970-01-01
      相关资源
      最近更新 更多