2012-01-05 16 views
8

का उपयोग कर cfscript मैं एक cffunction कि ठीक काम करता है के रूप में इस कोड है जेएसओएन ठीक करता है और मैं इसे jQuery के साथ संसाधित कर सकता हूं। दूसरा फेंकता है और त्रुटि करता है "loadService फ़ंक्शन से लौटाया गया मान JSON प्रकार का नहीं है।"JSON उत्तर समारोह

मैंने इसे SerializeJSON के साथ और बिना कोशिश की है और दोनों तरीकों से उस त्रुटि को फेंक दिया गया है। मैंने फ़ंक्शन सिंटैक्स में JSON निर्दिष्ट किए बिना भी कोशिश की है। यह कोई त्रुटि नहीं फेंकता है लेकिन यह इसके चारों ओर wddxpacket जानकारी लपेटता है। यह ऐसा लगता है जब मैं JSON निर्दिष्ट नहीं करता:

<wddxPacket version='1.0'><header/><data><string>{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}</string></data></wddxPacket> 

मैं इस पर अटक गया हूं। कोई भी मदद बहुत अच्छी रहेगी। धन्यवाद!

उत्तर

10

CF9 में सही CFScript वाक्य रचना है:

remote any function loadService() returnformat="JSON" { 

तकनीकी तौर पर, "JSON" नहीं एक समारोह (see here for all returntypes) से एक वैध returntype है, लेकिन आप लिखना जब:

remote JSON function 

.. आप मूल रूप से यह कह रहे हैं।

अपने टैग-आधारित कैफंक्शन कॉल में नोटिस, आप रिटर्न टाइप निर्दिष्ट नहीं करते हैं ... तो अनुमान लगाएं कि यह डिफ़ॉल्ट रूप से क्या है? (संकेत: कोई भी)।

रिटर्न टाइप करना और वापसी करना आसान है। ऊपर एक सरल समायोजन और आपको जाने के लिए अच्छा होना चाहिए।

पूरा कोड

component extends="core.core" { 

remote any function loadService() returnFormat="JSON" { 

    objResponse = '{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}'; 

    SerializeJSON(objResponse); 

    return objResponse; 
} 

} 
+0

वाह, मैं अब देखते हैं। मैं रिटर्नटाइप और रिटर्न प्रारूप को मिला रहा था। यह तो मूर्खता थी। मैंने returnformat = "JSON" जोड़ा और यह बहुत अच्छा काम किया। सहायता के लिए धन्यवाद। मैं वास्तव में इसकी प्रशंसा करता हूँ। – Sequenzia

+0

निश्चित रूप से SerializeJSON() के बारे में पेरुज़ की टिप्पणी पर ध्यान दें। –

+0

आपने कहा "सीएफ 9 में सही सीएफएसक्रिप्ट सिंटैक्स है:", क्या सीएफएसक्रिप्ट के लिए कुछ प्रकार के दस्तावेज हैं ... आप इसे कैसे जानते थे? – John

2

इसके अलावा, मैंने देखा है कि आप अपने कार्य में

SerializeJSON(objResponse); 

है। इस लाइन का आपके फ़ंक्शन की वापसी पर कोई प्रभाव नहीं पड़ता है। इसलिए, इसे आसानी से हटाया जा सकता है क्योंकि आपका objResponse मान पहले से ही JSON स्ट्रिंग में है। लेकिन, अगर objResponse का मूल्य था जैसे

objResponse = { 
    "CONFIG" = [["internal"], ["success"]], 
    "DATA" = [["Message1"]] 
}; 

कुछ तो आप की तरह

return serializeJSON(objResponse); 

जो कुछ जटिल डेटा आप JSON स्ट्रिंग में था बारी होता कर सकते थे।

यहाँ पूरा समारोह

remote any function loadService() 
    returnFormat="JSON" 
{ 
    objResponse = { 
     "CONFIG" = [["internal"], ["success"]], 
     "DATA" = [["Message1"]] 
    }; 

    return serializeJSON(objResponse); 
} 
+0

प्रतिक्रिया के लिए धन्यवाद। मैं वास्तव में serializeJSON के प्लेसमेंट के साथ खेल रहा था। यह – Sequenzia

+0

+1 में मदद करता है, इस पर अच्छी पकड़ है। –

1

एक और तरीका है 'returnFormat' निर्दिष्ट करने के लिए है व्याख्या का उपयोग करना होगा:

component extends="core.core" { 
/** 
* @hint   loads properties of an object and returns them in as JSON 
* @output  false 
* @returnFormat JSON 
*/ 
remote struct function loadService() { 
    objResponse = { 
    CONFIG = [["internal"],[ "success"]], 
    DATA = [["Message1"]] 
    }; 
    return objResponse; 
} 
} 
संबंधित मुद्दे