2013-11-09 8 views
6

मैं अपने स्थानीय सर्वर (एमएएमपी का उपयोग करके) api.php को कॉल करने का प्रयास कर रहा हूं। सर्वर साइड api.php बुलाया जा रहा है, लेकिन php कोड के अंदर _POST की सामग्री निम्न त्रुटि शामिल हैं:AFNetworking 2.0 पोस्ट समस्या, कोको त्रुटि 3840 (JSON पाठ सरणी के साथ शुरू नहीं हुआ ...)

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

मेरे कि करने के लिए api.php एक iOS है JSON पोस्ट अनुरोध भेजने के लिए कोशिश कर रहा है अनुप्रयोग AFNetworking 2

का उपयोग करके ऐप यह मेरा अनुरोध कोड है:

- (void)postUpdateRequest 
{ 
    if (!dataModel) 
     dataModel = [[DataModel alloc] init]; 

    NSDictionary *params = @{@"foo": @"bar2"}; 

    NSLog(@"%@",params); 

/* NSDictionary *params = @{@"cmd":@"update", 
          @"user_id":[dataModel userId], 
          @"token":[dataModel deviceToken] 
          };//@"ip_address":[dataModel getIPAddress]};*/ 

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

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

मैं सभी इंटरनेट पर देखा लेकिन मेरे विशिष्ट समस्या के लिए एक जवाब नहीं मिल रहा। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं मुझे एक ही त्रुटि मिलती है।

मेरा JSON ठीक तरह से स्वरूपित क्यों नहीं है? मैं वास्तव में जो JSON भेज रहा हूं उसे छीनने का एक तरीका ढूंढने के लिए प्रतीत नहीं होता है।

धन्यवाद।

+0

1) क्या आप वाकई JSON डेटा भेजने बनाता है? (वास्तव में, आप नहीं करते हैं)। 2) आप सर्वर से क्या उम्मीद करते हैं? (शायद आप जो उम्मीद करते हैं वह नहीं) 3) कोड की रेखा कहां है जो त्रुटि का कारण बनती है? – CouchDeveloper

उत्तर

5

जब आप अपने उदाहरण के रूप में एपीआई का उपयोग करते हैं, तो आपका HTTP संदेश सामग्री-प्रकार application/x-www-form-urlencoded का उपयोग करके तैयार किया जाएगा। आंतरिक रूप से, आपके param शब्दकोश एएफएन द्वारा एन्कोड किए गए हैं (हालांकि डब्ल्यू 3 सी द्वारा निर्दिष्ट कड़ाई से सही नहीं है), और अनुरोध निकाय के रूप में सेट करें।

चूंकि आपने Accept शीर्षलेख निर्दिष्ट नहीं किया है, तो सर्वर संभावित प्रतिक्रिया डेटा (यदि कोई हो) के लिए सामग्री प्रकार चुनने के लिए स्वतंत्र है।

जब आपको कोई प्रतिक्रिया प्राप्त होती है, तो आपको हमेशा HTTP स्थिति कोड और प्रतिक्रिया निकाय सामग्री सामग्री (यदि कोई हो) की जांच करें।

यह संभावना है कि सर्वर ने कुछ समस्या का संकेत देने वाला एक स्टेटस कोड लौटाया है और एक प्रतिक्रिया निकाय जिसमें कुछ अलग प्रकार की सामग्री प्रकार में "त्रुटि प्रतिक्रिया" होती है, उदाहरण के लिए (उदाहरण के लिए, यह टेक्स्ट/एचटीएमएल लौटाता है)।

+0

मुद्दा यह था कि मैं वास्तव में त्रुटि संदेश में _POST डालने की कोशिश कर रहा था लेकिन मुझे लगता है कि त्रुटि प्रारूप पर शिकायत की गई है। मैंने exitWithError (400, $ _POST) की तरह कुछ किया; मैंने गलती से सोचा कि मैं _POST सामग्री प्रिंट कर रहा था। – user1097185

2

आप सिम्युलेटर में ऐप चलाने के दौरान या वास्तविक वाईफाई के माध्यम से जुड़े डिवाइस पर वास्तविक अनुरोधों और प्रतिक्रियाओं का पता लगाने के लिए whireshark चला रहे हैं, जबकि आप wireshark (http://www.wireshark.org/) जैसे smth का उपयोग कर सकते हैं।

2

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

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

[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    manager.requestSerializer = requestSerializer; 

[manager POST:URLString 
     parameters:params 
      success:^(AFHTTPRequestOperation *operation, id responseObject) { 
       NSLog(@"JSON: %@", responseObject); 
       [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
       NSLog(@"Error: %@", error); 
       [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; 
      }]; 
संबंधित मुद्दे