2015-10-09 8 views
9

बनाने के लिए आगे स्लैश को क्रमबद्ध करता है I AFNetworking 2.0 का उपयोग कर रहा हूं।AFNetworking जेएसओएन पेलोड अमान्य

(AFHTTPRequestOperation *)POST:(NSString *)URLString 
        parameters:(id)parameters 
         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure 

यह JSON पेलोड जो हम सर्वर से 'POST' करना चाहते हैं के लिए पैरामीटर के रूप में NSDictionary स्वीकार करता है:

AFNetworking में, AFHTTPRequestOperationManager वस्तु एक API है। मेरी पेलोड में मैं कुंजी-मान पेयर निम्नलिखित है:

"buttonActionParam":"/catalog/special/international-calling"

पोस्ट किया जा रहा यह पेलोड सर्वर की ओर अमान्य JSON। सर्वर साइड मैंने महसूस किया कि AFNetworking वास्तव में भेज रहा है पर पेलोड को देखते हुए:

"buttonActionParam":"\/catalog\/special\/international-calling".

मैं जानता हूँ कि AFNetworking पुस्तकालय NSJSONSerialization के वर्ग विधि -dataWithJSONObject: है, जो इस का कारण बनता है का उपयोग करता है। मेरा सवाल है:

प्रश्नोत्तर इस मुद्दे के आसपास कैसे काम करें?

+0

सुनिश्चित नहीं हैं कि मैं सवाल समझ में: तुम कह रहे हो कि तुम भेजने के लिए "buttonActionParam" कोशिश कर रहे हैं मुसीबत? –

+0

मेरा प्रश्न संपादित किया गया। बचने के पात्रों को रखना था। :) –

+0

'NSJSONSerialization' से बाहर आने वाली' NSData' सर्वर के पक्ष में जो कुछ भी आप देख रहे हैं उतना ही उतना ही नहीं है - यह '{" बटनएक्शन पैराम "दिखाता है:" \/catalog \/special \/international- मेरे हेक्स संपादक में "} 'को कॉल करना। मुझे आश्चर्य है कि यह एक चरित्र एन्कोडिंग समस्या है - ऐसा लगता है कि कुछ कारणों से सर्वर एक अतिरिक्त भागने में चिपक रहा है। –

उत्तर

1

यह पता समस्या है। यह वास्तव में डिजाइन के रूप में व्यवहार करता है (देखें https://stackoverflow.com/a/20448342/669586)।

  1. अपने सर्वर संभावना है कि तार भाग निकले जा सकता है के बारे में पता करें:

    3 संभव समाधान कर रहे हैं। आम तौर पर, यह सबसे अच्छा समाधान है।

  2. एक अलग JSON एन्कोडर (उदा। SBJson) का उपयोग करें और ऑब्जेक्ट को AFNetworking डिफ़ॉल्ट serializer का उपयोग करने के बजाय NSData पर एन्कोड करें।

  3. NSJSONSerialization और उसके बाद का उपयोग कर एनकोड एक NSString (का उपयोग कर NSUTF8StringEncoding) करने के लिए परिणामी डेटा कनवर्ट करते हैं, यह स्वच्छ और इसे वापस कन्वर्ट NSData करने के लिए। फिर, आपको एएफनेटवर्किंग को ऑब्जेक्ट देने से पहले ऐसा करना होगा।

सबसे अच्छा तरीका है 2 या 3 AFHTTPSessionManager उदाहरण पर एक कस्टम requestSerializer स्थापित कर रही है लागू करने के लिए। उदाहरण के लिए, लागू करने के उदाहरण के लिए this answer देखें (यह स्विफ्ट में नोट करें)। "/ सूची/विशेष/अंतरराष्ट्रीय बुला", और यह वास्तव में क्या AFNetworking द्वारा भेजा जा रहा है, तो क्या है:

+0

# 2 काम करेगा केवल अगर एसबीजेसन का उपयोग AFNetworking के बाद किया जाता है। # 3 मैंने पोस्ट करने से पहले कोशिश की। काम नहीं करता मैं # 1 कोशिश करूंगा। –

+0

@ डेबोरशीसा नाप, यह ज्यादातर इस बारे में है कि आप धारावाहिक कैसे स्थापित करते हैं।यदि आप AFNetworking को अपने डिफ़ॉल्ट अनुरोध serializer (जो 'NSJSONSerialization' का उपयोग करता है) का उपयोग नहीं करते हैं, तो आपको कोई समस्या नहीं है। – Sulthan