目標是通過查詢數據庫進行簡單的用戶名/密碼認證。直到連接工作體面我的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