2013-10-30 6 views
6

Hej, मैं पार्स REST API करने के लिए एक पोस्ट अनुरोध कर रही है के साथ संघर्ष कर रहा हूँ। मैं AFNetworking 2.0 का उपयोग कर रहा हूँ।पोस्ट अनुरोध -</p> <p>AFHTTPSessionManager

+ (ParseAPISession *)sharedSession { 
    static ParseAPISession *sharedSession = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedSession = [[ParseAPISession alloc] initWithBaseURL:[NSURL URLWithString:kSDFParseAPIBaseURLString]]; 
    }); 
    return sharedSession; 
} 

और::

- (id)initWithBaseURL:(NSURL *)url { 
    self = [super initWithBaseURL:url]; 
    if (self) { 
     [self.requestSerializer setValue:kSDFParseAPIApplicationId forHTTPHeaderField:@"X-Parse-Application-Id"]; 
     [self.requestSerializer setValue:kSDFParseAPIKey forHTTPHeaderField:@"X-Parse-REST-API-Key"]; 
    } 

    return self; 
} 

मैं इस तरह का अनुरोध कर रहा हूँ:

[[ParseAPISession sharedSession] POST:@"ClassName" parameters: [NSDictionary dictionaryWithObjectsAndKeys:@"name", @"name", nil] 
           success:^(NSURLSessionDataTask *task, id abc) { 
            NSLog(@"%@", abc); 
           } failure:^(NSURLSessionDataTask *task, NSError *error) { 
            NSLog(@"%@", error); 
}]; 

ऐसा करने से मैं हमेशा त्रुटि के इस प्रकार प्राप्त AFHTTPSessionManager उपवर्ग के लिए मेरे कोड इस प्रकार दिखता है :

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=0x8c72420 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

चूंकि जीईटी अनुरोध एक आकर्षण की तरह काम करता है, मैं काफी उलझन में हूं कि मैं कुछ पोस्ट क्यों नहीं कर सकता। क्या कोई मुझे इस समस्या से रोक सकता है?

सर्वश्रेष्ठ संबंध!

अद्यतन

सौभाग्य से एक बहुत इस त्रुटि संदेश अब और प्रदर्शित नहीं किया जाता आसपास परीक्षण के बाद, unfortuatelly एक और दिखाई नहीं दी:

<NSHTTPURLResponse: 0x8b96d40> 
{ URL: https://api.parse.com/1/users } 
{ status code: 400, 
headers { 
    "Access-Control-Allow-Origin" = "*"; 
    "Access-Control-Request-Method" = "*"; 
    "Cache-Control" = "no-cache"; 
    Connection = "keep-alive"; 
    "Content-Length" = 130; 
    "Content-Type" = "application/json; charset=utf-8"; 
    Date = "Wed, 30 Oct 2013 20:01:58 GMT"; 
    Server = "nginx/1.4.2"; 
    "Set-Cookie" = "_parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNjIxZjUxMzY3NWVhZWJmMDYyYWYwMGJiZTQ3MThmMWE%3D--851bd31b07e7dba2c5f83bb13a8d801ecbea42c4; domain=.parse.com; path=/; expires=Fri, 29-Nov-2013 20:01:58 GMT; secure; HttpOnly"; 
    Status = "400 Bad Request"; 
    "X-Runtime" = "0.060910"; 
    "X-UA-Compatible" = "IE=Edge,chrome=1"; 
} } 

किसी को भी मुझे बता सकते हैं क्या स्थिति: 400 गलत अनुरोध कह है मैं और मैं इससे कैसे छुटकारा पा सकता हूं?

उत्तर

9

यह त्रुटि का अर्थ है कि आपका POST अनुरोध पूरा हो गया है, सर्वर सफलतापूर्वक आपको कुछ डेटा लौटा रहा है, जो NSJSONSerialization को पार्सिंग में परेशानी हो रही है।

आपको शायद JSON टुकड़े की अनुमति देने के लिए अपना AFJSONResponseSerializer सेट करने की आवश्यकता है।

अपने AFHTTPSessionManager उपवर्ग के init विधि में:

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
[self setResponseSerializer:responseSerializer]; 

यदि यह काम नहीं करता है, तो आप शायद एक एन्कोडिंग मुद्दा है।

The data must be in one of the 5 supported encodings listed in the JSON specification: UTF-8, UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE. The data may or may not have a BOM. The most efficient encoding to use for parsing is UTF-8, so if you have a choice in encoding the data passed to this method, use UTF-8.

चेक एन्कोडिंग अपने सर्वर द्वारा भेजे प्रकार: NSJSONSerialization वर्ग संदर्भ से।

अंत में, आप या तो AFNetworking के अंदर ब्रेकपॉइंट सेट कर सकते हैं, या AFNetworkActivityLogger सेट अप कर सकते हैं, जो आपके कंसोल पर भेजे गए अनुरोधों को लॉग और प्राप्त करेंगे। यह टूल इस प्रकार के मुद्दे को डीबग करने के लिए अविश्वसनीय रूप से सहायक है।

+0

(यह भी संभव सर्वर JSON के अलावा कुछ लौटा रहा है जिस स्थिति आप डॉन में 'AFJSONResponseSerializer' का उपयोग करना नहीं चाहते हैं।) –

+0

हेज, आपकी प्रतिक्रिया के लिए धन्यवाद! मैंने इसे आजमाया लेकिन फिलहाल मुझे एक और प्रकार का त्रुटि संदेश मिला (ऊपर अपडेट देखें) जहां मुझे लगता है कि मूल समस्या अब मुख्य समस्या नहीं है ....शायद आप इसके साथ मेरी मदद कर सकते हैं? – RuNsTa

+0

आपको इसके लिए एक अलग सवाल पूछना चाहिए। आपका अनुरोध पार्स के लिए उचित प्रारूप नहीं है, और सर्वर इसे अस्वीकार कर रहा है। (आईई, अब आपके पास एक पार्स मुद्दा है, न कि एक AFNetworking मुद्दा।) –

1

यह मेरे लिए काम किया:

AFHTTPSessionManager उपवर्ग में

निम्नलिखित serialisers के साथ आरंभ:

[self setRequestSerializer:[AFHTTPRequestSerializer serializer]]; [self setResponseSerializer:[AFJSONResponseSerializer serializer]];

संबंधित मुद्दे