Как вы передаете массив через URL веб-сервера PHP?

0

Я пытаюсь отправить данные на веб-сервер PHP.

NSString *urlString = [NSString stringWithFormat: @"xxxxx.com/dbfuncts.php?action=createuser&user=%@&pword=%@&fname=%@&lname=%@&email=%@[&team_id=team_id]", [newPerson objectForKey:@"ua_username"], [newPerson objectForKey:@"ua_password"], [newPerson objectForKey:@"ua_fname"],[newPerson objectForKey:@"ua_lname"], [newPerson objectForKey:@"ua_email"], @@@@@];
//The array goes where '@@@@@' is.
NSURL *url = [NSURL URLWithString:urlString];
NSData* jsonData = [NSData dataWithContentsOfURL:url];
NSError *error;
id userProfile = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];


if(userProfile != nil){
    NSLog(@"%@", userProfile);
    return userProfile;
} else{
    NSLog(@"ERROR");
    return nil;
}

Единственная проблема заключается в том, что я не знаю, как передать данные в массиве в URL-адресе. Как мне это сделать?

  • 0
    Вы не должны использовать запрос GET для этого. Простой пароль будет зарегистрирован в журналах сервера и т. Д. Используйте запрос POST и отправьте данные в полезную нагрузку.
  • 0
    Какой метод вы рекомендуете? Я не уверен, где искать, потому что поиск в Google дал много разных ответов.
Теги:

1 ответ

1

В этом случае вы должны использовать библиотеку AFNetworking

Вы просто задали свой массив в json в разделе параметров, что "все волшебство.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSDictionary *params = @{@"width": width, @"weight": weight};
[manager POST:@"https://mysite.com/myobject" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

Чтобы заблокировать выполнение основного потока до завершения операции, вы можете выполнить [операцию waitUntilFinished] после добавления в очередь операций. В этом случае вам не понадобится возврат в блок; установки переменной __block было бы достаточно. Таким образом, вы завершаете запрос в выделенном методе и после вызова их выполняете waitUntilFinished. Но я думаю, что создание сети синхронно - это не очень хорошая идея.

За все время загрузки вашего запроса будет видно, что ваше приложение заморожено - полностью не отвечает на касание и системные события, пока запрос не завершится.

По крайней мере, покажите мода загрузки, которая не будет отменена до тех пор, пока запрос не завершится. Еще лучше, сделайте так, чтобы пользователь мог нормально взаимодействовать с приложением при загрузке, если это возможно.

РЕДАКТИРОВАТЬ

Если вам нужно показать что-то, пока сеть не работает, вам нужно сделать следующие шаги. Прежде всего оберните свой метод networkMethod:

- (void)postEventsWithHandler:(void (^)(BOOL isSuccess))handler
{   
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    NSDictionary *params = @{@"width": width, @"weight": weight};
    [manager POST:@"https://mysite.com/myobject" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
    handler(YES);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    Handler(NO)
    }];
}

И тогда вам нужно вызвать этот метод из своего класса, в этом случае пусть представим, что у нас есть NetworkClass со всеми сетевыми запросами.

// SHOW modal popup or hud (BMProgressHUD for example)
[NetworkClass postEventsWithHandlerWithHandler:^(BOOL isSuccess) {
    // dismiss modal popup
    // make something...
    if (isSuccess)
    {

    }
    else
    {

    }
}];
  • 0
    Я действительно использовал AFNetworking раньше, но он работает асинхронно, и мне нужно, чтобы он работал синхронно.
  • 0
    Вы не запускаете сетевой запрос синхронно.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню