Метод API POST не сохраняет данные на сервере SQL
Привет, я новичок в разработке для iphone, сейчас я работаю с проектом, где у меня есть экран, в котором пользователь должен ввести свои данные, такие как имя пользователя и пароль. Я погуглил и узнал о NSURLConnection
для получения / размещения / удаления. Я могу получить данные по кодам ниже,
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://************/api/Users"]];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-
Type"];
NSURLResponse *response;
NSData *GETData = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:nil];
NSString *ResultData = [[NSString alloc] initWithBytes:[GETData bytes] length:[GETData
length] encoding: NSASCIIStringEncoding];
NSLog(@"ResultData: %@", ResultData);
Но для метода POST я не понимаю, как он функционирует и как хранит записи в базе данных сервера SQL, не могу понять, хранит ли он данные или нет, я попробовал следующие коды:
username = @"Aravind.k";
password = @"1234/";
email = @"sivaarwin@gmail.com";
NSString *post = [NSString stringWithFormat:@"FirstName=%@&LastName=%@&WorkEmailAddress=%@",
username, password, email];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://*********/api/Users"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded;charset=UTF-8"
forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSLog(@"request: %@", request);
NSLog(@"postData: %@", postData);
NSURLResponse *response;
NSData *POSTReply = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response
error:nil];
NSLog(@"POSTReply: %@", POSTReply);
NSString *theReply = [[NSString alloc] initWithBytes:[POSTReply bytes]
length:[POSTReply length]
encoding:NSASCIIStringEncoding];
NSLog(@"Reply: %@", theReply);
Один и тот же URL-адрес API для GET и POST, любые предложения, касающиеся POST и DELETE, будут благодарны, заранее спасибо. И как мы можем получать уведомления, когда введенные данные сохраняются на сервере.
1 ответ
Во-первых: не проверка на ошибки автоматически приводит к снижению голосов;)
Пожалуйста, отредактируйте ваш код с полной проверкой ошибок!
При использовании типа MIME application/x-www-form-urlencoded
вам нужно правильно кодировать параметры.
Я хотел бы предложить, чтобы создать NSDictionary
удерживая ваши параметры, например:
NSDictionary* params = @{@"FirstName": firstName, @"LastName": lastName, @"password": password};
и затем использовать подход, описанный в следующей ссылке, чтобы получить закодированную строку параметров, подходящую для использования в качестве основных данных для application/x-www-form-urlencoded
сообщение:
Как отправить несколько параметров на сервер PHP в сообщении HTTP
Ссылка выше реализует категорию и метод dataFormURLEncoded
для NSDictionary, который возвращает закодированную строку в NSData
объект:
NSData* postData = [params dataFormURLEncoded];
Примечание: тип MIME application/x-www-form-urlencoded
не имеет параметра charset. Он будет игнорироваться сервером. Вы должны установить заголовок, как показано ниже:
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
В противном случае ваш код должен работать. Я настоятельно рекомендую использовать асинхронную версию удобного метода:
+ (void)sendAsynchronousRequest:(NSURLRequest *)request
queue:(NSOperationQueue *)queue
completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler