2013-05-30 3 views
1

Я пытаюсь отправить данные JSON в почтовом запросе на сервер, который вызывает ошибку. Я создаю данные в следующем форматеОтправка данных json в почтовом запросе в iphone

 NSDictionary *o1 = [[NSMutableDictionary alloc] init]; 
     [o1 setValue:@"51" forKey:@"merchantProductId"]; 
     [o1 setValue:@"Big Paulie" forKey:@"name"]; 
     [o1 setValue:@"1" forKey:@"quantity"]; 
     NSDictionary *o2 = [[NSMutableDictionary alloc] init]; 
     [o2 setValue:@"52" forKey:@"merchantProductId"]; 
     [o2 setValue:@"Paulie" forKey:@"name"]; 
     [o2 setValue:@"10" forKey:@"quantity"]; 

     NSMutableArray *pizzas = [NSMutableArray arrayWithObjects:o1, o2, nil]; 
     NSDictionary *o3 = [[NSMutableDictionary alloc] init]; 
     [o3 setValue:@"3" forKey:@"merchantId"]; 
     [o3 setValue:pizzas forKey:@"pizzas"]; 
     NSMutableArray *orderArray = [NSMutableArray arrayWithObjects:o3, nil]; 
     NSData *jsData = [NSJSONSerialization dataWithJSONObject:orderArray options:NSJSONWritingPrettyPrinted error:nil]; 
NSString *data = [NSString stringWithFormat:@"data=%@",[[NSString alloc] initWithData:jsData                     encoding:NSUTF8StringEncoding]]; 

     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http:61.12.124.234:60/upload_image/phoneTesting.php"]]]; 
    [request setHTTPMethod:@"POST"]; 
    // [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:postData]; 

    NSHTTPURLResponse* urlResponse = nil; 
    error = [[NSError alloc] init]; 
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; 
    NSString *result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 

    NSLog(@"Response: %@", result); 

В сервере мне нужно данные должны представить как

 { 
    "pizzas" : [ 
     { 
     "quantity" : "1", 
     "merchantProductId" : "51", 
     "name" : "Big Paulie" 
     }, 
     { 
     "quantity" : "10", 
     "merchantProductId" : "52", 
     "name" : "Paulie" 
     } 
    ], 
    "merchantId" : "3" 
    } 

, но я получаю

(
    [data] => [ 
    { 
    "pizzas" : [ 
     { 
     "quantity" : "1", 
     "merchantProductId" : "51", 
     "name" : "Big Paulie" 
     }, 
     { 
     "quantity" : "10", 
     "merchantProductId" : "52", 
     "name" : "Paulie" 
     } 
    ], 
    "merchantId" : "3" 
    } 
] 
) 

и когда я пытаюсь отправить только jsData ничего не отправляет с requset.

, пожалуйста, предложите мне отправить только данные json в почтовом запросе.

я использую xcode4.5

+0

Где инициализируется 'postData'? – Mar0ux

+0

Существует несколько значений, не имеющих очевидных инициализаций. И неясно, как вы когда-либо делаете JSData в запросе. Пожалуйста, предоставьте полный код. –

ответ

0

Я задаюсь вопросом, почему вы делаете следующую строку:

NSString *data = [NSString stringWithFormat:@"data=%@", 
    [[NSString alloc] initWithData:jsData encoding:NSUTF8StringEncoding]]; 

Если запрос был GET, то вам нужно ключевое значение спаривание, но вы просто отправки данных POST , которому не нужен ключ.

Я думаю, именно поэтому вы получаете этот сверхъестественный [data] = entry. Если вы сделаете это:

NSString *data = [NSString stringWithFormat:@"%@", 
    [[NSString alloc] initWithData:jsData encoding:NSUTF8StringEncoding]]; 

Это работает?

+0

Не видите, как это может работать, поскольку «данные», по-видимому, никогда не используются. –

+0

Да, ты прав. Если данные действительно постдаты, то у меня может быть что-то здесь. Похоже, он считает, что ему нужен синтаксис GET с полезной нагрузкой POST. –

0

Он смотрит на меня, как вы сериализацию неправильного объекта в этой строке:

NSData *jsData = [NSJSONSerialization dataWithJSONObject:orderArray 
    options:NSJSONWritingPrettyPrinted error:nil]; 

Почему вы сериализация массива, содержащий словарь? Конечно, вы должны просто сериализовать сам словарь.

NSData *jsData = [NSJSONSerialization dataWithJSONObject:o3 
    options:NSJSONWritingPrettyPrinted error:nil]; 

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

  • Нет связанных вопросов^_^