Я новичок в разработке для iOS, и я застрял в своем небольшом проекте, где мне нужно создать асинхронный POST-запрос к сайту php. Я читал ресурсы онлайн и обнаружил, что AFNetworking лучше всего подходит для этой работы, поэтому я установил AFNetworking 2.4, используя cocoapods через терминал. У меня есть контроллер представления, который имеет 2 текстовых поля (имя пользователя и пароль). Всякий раз, когда я нажимаю кнопку «Вход», я отправляю асинхронный запрос POST на веб-сайт php. Запрос POST должен содержать параметры «имя пользователя» и «пароль» и получит Ответ JSON обратно с «кодом» и «сообщением». Я должен отобразить проанализированный код и сообщение в UIAlert вместе с тем, сколько времени потребовался вызов API в миллисекундах. Единственный действительный логин — имя пользователя: Yomaki пароль: asdfgh. После успешного входа в систему, нажав «ОК» в UIAlert, вы вернетесь к MainMenuViewController. Пожалуйста, посмотрите на то, что я попробовал код ниже. Я попробовал следующие пару уроков онлайн, но не сработало.
Пожалуйста, посмотрите на код ниже,
(IBAction)loginButton:(id)sender
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"Yomaki": _usernameTextField, @"asdfgh": _passwordTextField};
NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"PHP URL HERE"]];
AFHTTPRequestOperation * operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
}
Пожалуйста, помогите мне с кодом, так как я впервые отправляю асинхронный запрос POST на сайт php.
Заранее спасибо.
Вы не хотите использовать _usernameTextField
( UITextField
), скорее _usernameTextField.text
или, может быть, лучше, self.usernameTextField.text
( NSString
свойство этого тестового поля). То же самое относится и к паролю.
Я бы также воспользовался POST
метод:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"userid": self.usernameTextField.text, @"password": self.passwordTextField.text};
[manager POST:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Обратите внимание, что в вашем словаре вы заменили имена полей (предположительно что-то вроде userid
а также password
, хотя и посоветуйтесь с авторами вашего веб-сервиса) с примерами значений идентификатора пользователя / пароля. Я думаю, что вы хотите восстановить исходные имена полей.
От: Джунда Онг Руководство
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:@"yourURL"parameters: parameters
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject); }
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
NSURL * url = @"your url";
NSString * user = ([userField.text length] == 0) ? @"" : userField.text;
NSString * pass = ([passField.text length] == 0) ? @"" : passField.text;
NSMutableDictionary * postVars = [NSMutableDictionary dictionary];
[postVars setObject:user forKey:@"username"];
[postVars setObject:pass forKey:@"password"];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:url parameters:postVars success:^(AFHTTPRequestOperation *operation, id responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]){
if ([responseObject objectForKey:@"code"]) && ([responseObject objectForKey:@"message"]){
NSString * code = [responseObject objectForKey:@"code"];
NSString * message = [responseObject objectForKey:@"message"];
}
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// something went wrong with your http post
}];