सवाल AFNetworking 2.0 का उपयोग कर JSON डेटा पोस्ट करना


मेरे पास एक वेब स्क्रिप्ट है जो HTTP POST अनुरोध के माध्यम से JSON स्ट्रिंग को इनपुट के रूप में स्वीकार करती है। मैं इसके लिए कई AFNetworking 1.x उदाहरण में आया हूं, क्या कोई मुझे कृपया इंगित कर सकता है या एएफनेटवर्किंग 2.0 उदाहरण को एक वेब स्क्रिप्ट के लिए एक HTTP स्क्रिप्ट अनुरोध करने के लिए स्वरूपित जेएसओएन इनपुट के रूप में कर सकता है?

धन्यवाद


44
2018-01-31 18:15


मूल


AFNetworking github पृष्ठ पर माइग्रेशन मार्गदर्शिका पढ़ें। - Wain
समस्या यह है कि मैं AFNetworking के लिए नया हूं इसलिए मुझे वास्तव में पता नहीं है और मैं पिछले संस्करणों को समझने की इच्छा करता हूं, हालांकि मैं सुझाव के लिए ASIHTTP पृष्ठभूमि धन्यवाद से आ रहा हूं। - vishal dharankar
इस पर कोई विचार है? - vishal dharankar
JSON और POST के लिए खोजें cocoadocs.org/docsets/AFNetworking/2.1.0 आपको कुछ करने की कोशिश करनी है और फिर मदद मांगी है ... - Wain
@ वाइन मेरी इच्छा है कि यह इतना स्पष्ट था कि एक नौसिखिया भी समझ जाएगा - vishal dharankar


जवाब:


दस्तावेज़ों को खोजने और कुछ कोडों को आजमाने के बाद मुझे एक उदाहरण के रूप में निम्नलिखित मिला

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];


NSDictionary *params = @ {@"user" :txtUserName, @"pwd" :txtPwd };


[manager POST:URL_SIGNIN parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
    NSLog(@"JSON: %@", responseObject);
}
failure:
 ^(AFHTTPRequestOperation *operation, NSError *error) {
     NSLog(@"Error: %@", error);
 }];

सर्वर स्क्रिप्ट में प्रतिक्रिया शीर्षलेख प्रकार को एप्लिकेशन / जेसन के रूप में सेट करना भी न भूलें।


79
2018-02-10 08:21



इसने मेरे लिए काम नहीं किया। मुझे यह त्रुटि स्थिति कोड मिल रहा है: 200, हेडर {कनेक्शन = बंद; "सामग्री-लंबाई" = 5 9; "सामग्री-प्रकार" = "पाठ / एचटीएमएल; वर्णसेट = यूटीएफ -8"; तिथि = "सोम, 21 अप्रैल 2014 06:44:34 जीएमटी"; सर्वर = "अपाचे / 2.2.25 (अमेज़ॅन)"; "एक्स-पावर्ड-बाय" = "PHP / 5.3.27"; }}, NSLocalizedDescription = अनुरोध विफल: अस्वीकार्य सामग्री-प्रकार: टेक्स्ट / एचटीएमएल} - Nitesh
@Nitesh आपने उत्तर में अपने अंतिम बयान को अनदेखा किया :) "सर्वर स्क्रिप्ट में प्रतिक्रिया शीर्षलेख प्रकार को एप्लिकेशन / जेसन के रूप में सेट करना भी न भूलें" - vishal dharankar
आप देख सकते हैं यह जवाब JSON पार्सर के लिए यदि आप "टेक्स्ट / एचटीएमएल" सामग्री प्रकार स्वीकार करते हैं नहीं कर सकते हैं सर्वर स्क्रिप्ट बदलें। - mgarciaisaia
@mgarciaisaia प्रतिक्रिया प्रकार को टेक्स्ट / एचटीएमएल के रूप में सेट करना और जेएसओएन भेजना बुरा अभ्यास है, कोई मानक एपीआई ऐसा नहीं करता है। - vishal dharankar
यह मेरे लिए भी काम नहीं करता है। मुझे मिल रहा है "JSON टेक्स्ट सरणी या ऑब्जेक्ट और विकल्प के साथ शुरू नहीं हुआ था ताकि टुकड़े सेट न किए जा सकें।" - Olcay Ertaş


यहां पोस्ट किए गए POST पैरामीटर के लिए कुछ सरल टेम्पलेट यहां दिया गया है NSMutableDictionary जेएसओएन प्रारूप में पैरामीटर। AFNetworking 2.4.1 के साथ काम करता है।

NSString *baseURL = @"http://your-server.com/";
NSString *path = @"method/url/";

NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setObject:@"value" forKey:@"key"];

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

[manager POST:path parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {

        NSLog(@"JSON: %@", responseObject);
        //here is place for code executed in success case

} failure:^(NSURLSessionDataTask *task, NSError *error) {

        //here is place for code executed in error case
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error while sending POST"
                                                            message:@"Sorry, try again."
                                                           delegate:nil
                                                  cancelButtonTitle:@"Ok"
                                                  otherButtonTitles:nil];
        [alertView show];

        NSLog(@"Error: %@", [error localizedDescription]);
}];

20
2017-09-16 13:21



मुझे यकीन नहीं है, लेकिन यह अब और काम नहीं कर रहा है। कृपया इसे जाँचे सवाल। - Hemang
मैंने इसे AFNetworking के नए संस्करण के लिए नहीं देखा है। निश्चित रूप से यह 2.4.1 संस्करण पर काम करता है। - lukszar
ठीक है ! धन्यवाद। - Hemang


यदि आप जेसन को सर्वर पर पोस्ट करना चाहते हैं, तो आपको अपने पैरामीटर को इस तरह से नीचे पोस्ट करना चाहिए।

इस तरह का उपयोग करें, फिर आप अपने अनुरोध हेडर में "सामग्री-प्रकार" ढूंढ सकते हैं "एप्लिकेशन / जेसन" है।

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;

 NSDictionary *paras = @{@"uid" : @(10020)};

[manager POST:@"http://your.request.url" parameters:paras success:^(AFHTTPRequestOperation *operation, id responseObject) {



}failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(@"the falire is %@", error);

}];

यह मदद कर सकते हैं। :)


8
2018-05-25 02:16



यह काम किया, धन्यवाद। कृपया मेरे उत्तरों को भी रेट करें :) - Muhammad Ahsan


तेजी से:

इसे जोड़ें manager.AFHTTPRequestOperationManager

manager.requestSerializer = AFJSONRequestSerializer(writingOptions: NSJSONWritingOptions.PrettyPrinted)

5
2017-08-19 19:04





यदि आप पैरामीटर शब्दकोश जेसन स्ट्रिंग को निम्नलिखित कोड का उपयोग करना चाहते हैं

NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"your_webservice_post_url"]];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSError *error;
NSDictionary *parameters = @{@"customValue":@"value"};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];
 [urlRequest setHTTPMethod:@"POST"];
 [urlRequest setHTTPBody:jsonData];

1
2018-04-28 13:14