2013-05-10 7 views
13

Для отправки регистрационных данных на сервер, я использую JSON в следующем виде:Отправить вложенной JSON с помощью AFNetworking

Вот как я посылаю.

NSURL * url = [[NSURL alloc] initWithString:registerUrlString]; 
      AFHTTPClient * httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 
      httpClient.parameterEncoding = AFJSONParameterEncoding; 
      [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; 
      NSDictionary * params = @{@"regData": @{ 
               @"City": self.cityField.text, 
               @"Country": self.countryField.text, 
               @"Email_Id": self.emailField.text, 
               @"MobileNumber": self.numberField.text, 
               @"UserName": self.userName.text, 
               } 
             }; 

      NSMutableURLRequest * request = [httpClient requestWithMethod:@"POST" path:registerUrlString parameters:params]; 
      AFHTTPRequestOperation * operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
       NSLog(@"Success: %@", JSON); 

      } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
      NSLog(@"Error: %@", [error debugDescription]); 
      }]; 

      [operation start]; 

Но, к сожалению, я получаю эту ошибку:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x94b3c30 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

+1

Ваш метод не является общим. Проверьте правильность метода [здесь] (http://stackoverflow.com/questions/14958883/ios-serialize-deserialize-complex-json-generically-from-nsobject-class). Меньше ошибок и поддерживаемых –

ответ

32

Ваш запрос в порядке. Ошибка Error Domain=NSCocoaErrorDomain Code=3840 возвращается, потому что ваш сервер отвечает недействительным объектом JSON. NSLogoperation.responseString, чтобы увидеть, что отправляется обратно.

+2

Спасибо, mattt! Я уже исправил эту проблему. Проблема была, как вы уже говорили. Я получал строку от сервера, а не json. – Homam

+1

@mattt, я подклассифицирован, 'AFHTTPSessionManager', где я могу найти' operation.responseString'? – Hemang

+0

@Hemang Вы нашли решение, связанное с "Error Domain = NSCocoaErrorDomain Code = 3840"? – Akhtar

2

Попробуйте это, чтобы получить фактические ошибки

NSLog(@"Error: %@", [error debugDescription]); 
NSLog(@"Error: %@", [error localizedDescription]); 
+4

Я получаю эту ошибку: Error Domain = NSCocoaErrorDomain Code = 3840 «Операция не может быть выполнена. (Ошибка Cocoa 3840.)» (текст JSON не начинался с массива или объекта, а опция разрешала фрагменты не установлены.) UserInfo = 0x94b3c30 {NSDebugDescription = текст JSON не начинался с массива или объекта и не позволял фрагментам не задаваться.} – Homam

Смежные вопросы