目标是通过查询数据库进行简单的用户名/密码认证。直到连接工作体面我的PHP目标文件压根儿就下面的代码:异步POST到服务器
echo "Posted: " . $_POST['email'];
同步做到这一点的代码是这样的:
NSString *post = [[NSString alloc] initWithFormat:@"email=%@&password=%@", self.email.text, ..]; // .. simplified keychainItem
NSData *postEncoded = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
NSString *postLength = [NSString stringWithFormat:@"%d", [postEncoded length]];
NSURL *url = [NSURL URLWithString:@"http://eng.studev.groept.be/web2.0/a11_web02/improver/app/testPost"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postEncoded];
NSError *error = nil;
NSURLResponse *response = nil;
NSData *encodedData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:encodedData encoding:NSUTF8StringEncoding];
NSLog(@"Data? %@",data);
正确的值显示为回声。但是,当试图做到这一点异步,我得到以下PHP错误:“未定义的索引:电子邮件”。 我尝试启动与该行的异步请求:
[[NSURLConnection connectionWithRequest:request delegate:self] start];
然后,我委托方法连接:didReceiveResponse,但我似乎无法获取数据了......或者我需要另一个委托方法?另外,它是如何'安全'是通过使用回声来检查查询结果(我是否需要/想要一个流可能?)?
蒂亚
EDIT
问题相关的服务器,而不是目标C代码。问到一个新的问题,以达到正确的观众:$_POST remaining empty
我完全理解你在说什么。添加了@property并保留了NSURLConnection和connectionWithRequest:delegate: 但是,仍然出现PHP错误“未定义索引:电子邮件” – mmvie
好了,这是您的服务器的响应,因此您需要从那里进行调试。无论是同步执行请求还是异步执行都无关紧要。看看你发布什么数据,并确保它是服务器需要的。我的答案是正确使用NSURLConnection。 – XJones
是的。 看来我的$ _POST变量保持为空。使用print_r($ _ POST)来调试它。 – mmvie