iPhone - 异步调用php页面并确保它已加载

时间:2011-05-07 01:03:31

标签: php iphone objective-c asynchronous nsurlconnection

在我的一个应用程序中,我想异步调用我编写的一个php页面(http://serveradress/page.php?date = 20111231),我肯定会知道该页面是否可以调用(没有404错误,php服务器关闭,自定义404页面,缺少互联网连接,或类似的东西)。 我已经计划让php页面返回一个非常简单的HTML页面,其主体或标题只有“OK”。

这将是一个“幻影”调用,不使用任何UIWebView,或者如果真的是nedded,隐藏的UIWebView,但我宁愿避免这种情况。

你能帮我写这个电话吗? 并确定知道它是否已被加载?

我看到我应该使用NSURLConnection,但我有点失落。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:4)

NSURLConection是异步加载的非常好的解决方案。创建一个步骤的步骤很少。

<强> 1。设置您的NSURLConnection

- (void)viewDidLoad {
    // your code...
    responseData = [[NSMutableData alloc] init];
    NSURL *url = [NSURL URLWithString:@"http://yourdomain.com/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]];
}

responseData是你的NSMutableData iVar。

<强> 2。实施委托方法

a)在此方法中,我们将检查HTTP状态代码

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    if ([response respondsToSelector:@selector(statusCode)]) {
        int statusCode = [((NSHTTPURLResponse *)response) statusCode];
        if (statusCode >= 400) {
            [connection cancel]; 
            NSDictionary *errorInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:NSLocalizedString(@"Server returned status code %d",@""),statusCode] forKey:NSLocalizedDescriptionKey];
            NSError *statusError = [NSError errorWithDomain:NSHTTPPropertyStatusCodeKey code:statusCode userInfo:errorInfo];
           [self connection:connection didFailWithError:statusError];
        }
    }
}

b)这会创建您的NSData组件

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [responseData appendData:data];
}

c)处理成功的网址连接

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // do whatever you want using responseData as your server output
}

d)处理错误

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    // handle your error
}

您可以使用[error userInfo]获取错误信息,并在UIAlertView中显示它。


因为我说NSURLConnection是非常好的解决方案,你还应该看ASIHTTPRequest library。 :)