2012-07-11 13 views
7

मैं JSON डेटा प्रकार का उपयोग कर POST विधि के साथ प्राप्तकर्ता सर्वर पर आईओएस पर बनाई गई एक नई वस्तु भेजना चाहता हूं। आईओएस में सर्वर से डेटा प्राप्त करने के बारे में मुझे पता है, यह है कि सभी JSON हैंडलिंग को आईओएस 5 की शुरूआत के साथ ऐप्पल द्वारा सरल बनाया गया था। लेकिन JSON ऑब्जेक्ट्स प्राप्त करने के लिए contradistinction में, पोस्ट करना उन चीज़ों को वास्तव में वर्णित नहीं किया गया है जो मुझे मिल सकता है ...मैं आईओएस 5 में सर्वर पर JSON डेटा ऑब्जेक्ट कैसे पोस्ट करूं?

पहला कदम मैं कोशिश करते हैं और समस्या के रूप में निम्नानुसार देखा हल करने के लिए ले लिया:

//build an info object and convert to json 
    NSDictionary *newDatasetInfo = [NSDictionary dictionaryWithObjectsAndKeys:name, @"name", language, @"language", nil]; 

    //convert object to data 
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:newDatasetInfo options:kNilOptions error:&error]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:someURLSetBefore]; 
    [request setHTTPMethod:@"POST"]; 
    // any other things to set in request? or working this way? 

    [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    // What to do with NSURLConnection? Or how to send differently? 

लेकिन मैं सच में पता नहीं कैसे करने के लिए एक पोस्ट विधि का उपयोग कर किसी सर्वर के लिए एक JSON ऑब्जेक्ट भेज बिल्कुल। क्या कोई मेरी मदद कर सकता है?

उत्तर

16

मैं इसे थोड़ा के आसपास कोशिश कर रहा द्वारा बाहर काम किया है, यहाँ मेरी कोड है:

//build an info object and convert to json 
    NSDictionary *newDatasetInfo = [NSDictionary dictionaryWithObjectsAndKeys:name, @"name", language, @"language", nil]; 

    //convert object to data 
    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:newDatasetInfo options:kNilOptions error:&error]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:someURLSetBefore]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setHTTPBody:jsonData]; 

    // print json: 
    NSLog(@"JSON summary: %@", [[NSString alloc] initWithData:jsonData 
                encoding:NSUTF8StringEncoding]); 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [connection start]; 
+0

आप संभवतः क्या अपने कोड में हो रहा है पर विस्तृत सकता है? मैंने इसे अपने ऐप में अभी इस्तेमाल किया है, लेकिन मैं ईमानदारी से यह नहीं जानता कि यह क्या कर रहा है। मैं शब्दकोश को समझता हूं और इसे JSON के लिए डेटा में बदलता हूं, लेकिन URLRequest और URLConnection के साथ सबकुछ मेरे लिए अज्ञात है। कोई स्पष्टीकरण बहुत अच्छा होगा! – Jonathan

+1

एक NSURLRequest मूल रूप से आपके वेब fetch के गुण सेट करने के लिए एक वस्तु है। सामान्य fetches में आपके पास सबसे अधिक उपयोग किए गए डिफ़ॉल्ट सेट स्वचालित रूप से सेट होते हैं, लेकिन जैसा कि मैं डेटा भेजना चाहता हूं, मैं HTTP POST विधि का उपयोग करना चाहता हूं और क्योंकि मैं एक JSON ऑब्जेक्ट प्राप्त करना चाहता हूं, मैं सामग्री-प्रकार को सेट करके सर्वर को यह बता रहा हूं और जेएसओएन प्रारूप में HTTP शीर्षलेख फ़ील्ड स्वीकार करें। HTTP प्रोटोकॉल और विशेष रूप से HTTP शीर्षलेख के बारे में अधिक जानने के लिए बस उनके लिए खोजें या यहां पढ़ें http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol और यहां http://en.wikipedia.org/wiki/List_of_HTTP_header_fields। – CGee

+0

NSURLConnection के बारे में और जानने के लिए मुझे लगता है कि सबसे अच्छा तरीका है एप्पल दस्तावेज़ीकरण में अपने वर्ग संदर्भ को पढ़ने के लिए यहां https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/ Reference.html। आम तौर पर मैं केवल आपको पहले एप्पल दस्तावेज में देखने के लिए प्रोत्साहित कर सकता हूं, क्योंकि यह इन चीजों को सीखने के लिए एक महान (और निश्चित रूप से अद्यतित) स्रोत है। – CGee

0
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://webstar52.com/demo/webcommunity/work.php"]]]; 
    NSString *post = [NSString stringWithFormat:@"&tag=%@&user_id=%@",@"getcontact",@"10408"]; 
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 
    [request setHTTPMethod:@"POST"];  
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"]; 
    [request setHTTPBody:postData]; 
    conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
1

NSString * strUrl = @ "URL"; NSURL * url = [NSURL URLWithString: strUrl];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]; 

// For set postdata in string 
NSString *strPatientID = [NSString stringWithFormat:@"%@%@%@%@",self.txtDegit1.text,self.txtDegit2.text,self.txtDegit3.text,self.txtDegit4.text]; 
NSString *deviceToken = @""; 
postString = [NSString stringWithFormat:@"practiceid=%@&email=%@&password=%@&devicetoken=%@",strPatientID,self.txtUsername.text,self.txtPassword.text,deviceToken]; 


NSMutableData *httpDataBody = [NSMutableData data]; 
[httpDataBody appendData:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 

NSString *strPostLength = [NSString stringWithFormat:@"%lu",[httpDataBody length]]; 

if ([httpDataBody length ] > 0){ 

    [request addValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPMethod:@"POST"]; 
    [request addValue:strPostLength forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:httpDataBody]; 

} 

urlConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
[urlConnection start]; 
2
- (IBAction)txtFetchData2:(id)sender { 
NSString *queryString = [NSString stringWithFormat:@"http://example.com/username.php?name=%@", [self.txtName text]]; 
NSMutableURLRequest *theRequest=[NSMutableURLRequest 
          requestWithURL:[NSURL URLWithString: 
              queryString] 
          cachePolicy:NSURLRequestUseProtocolCachePolicy 
          timeoutInterval:60.0]; 
NSDictionary* jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"Value1", @"Key1", 
           @"Value2", @"Key2", 
           nil]; 
NSError *error; 
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary 
         options:NSJSONWritingPrettyPrinted error:&error]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
// should check for and handle errors here but we aren't 
[theRequest setHTTPBody:jsonData]; 
[NSURLConnection sendAsynchronousRequest:theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
    if (error) { 
     //do something with error 
    } else { 
     NSString *responseText = [[NSString alloc] initWithData:data encoding: NSASCIIStringEncoding]; 
     NSLog(@"Response: %@", responseText); 

     NSString *newLineStr = @"\n"; 
     responseText = [responseText stringByReplacingOccurrencesOfString:@"<br />" withString:newLineStr];    
     [self.lblData setText:responseText]; 
    } 
}]; 
} 
संबंधित मुद्दे