json
  • coldfusion
  • 2012-01-05 12 views 8 likes 
    8

    Mam ten kod jako cffunction który działa prawidłowo:odpowiedź JSON za pomocą CFScript funkcję

    <cfcomponent extends="core.core"> 
    
    <cffunction name="loadService" access="remote" returnformat="JSON"> 
    
        <cfscript> 
    
         objResponse = '{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}'; 
    
        </cfscript> 
    
    <cfreturn objResponse> 
    
    </cffunction> 
    
    </cfcomponent> 
    

    próbuję przekonwertować go do pełnej funkcji CFScript jak ten:

    component extends="core.core"{ 
    
    remote JSON function loadService(){ 
    
        objResponse = '{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}'; 
    
        SerializeJSON(objResponse); 
    
        return objResponse; 
    } 
    
    } 
    

    Pierwszy sposób zwraca JSON dobrze i mogę go przetworzyć za pomocą jQuery. Drugi rzuca i błąd "Wartość zwrócona przez funkcję loadService nie jest typu JSON."

    Próbowałem go zi bez SerializeJSON i obie strony rzucić ten błąd. Próbowałem go również bez określania JSON w składni funkcji. To nie powoduje błędu, ale powoduje owinięcie wokół niego informacji o wddxpacket. Wygląda tak, gdy nie podaję JSON:

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

    Utknąłem na tym. Każda pomoc byłaby świetna. Dzięki!

    Odpowiedz

    10

    Poprawna składnia CFScript w CF9 jest:

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

    Technicznie "JSON" nie jest prawidłowym returntype z funkcji (see here for all returntypes), ale kiedy piszesz:

    remote JSON function 
    

    .. . W zasadzie to mówisz.

    Zawiadomienie w wywołaniu znacznika w oparciu o znaczniki, nie określa się typu returnType ... więc domyślam się, co to jest? (wskazówka: dowolna).

    Łatwo jest mieszać returnType i returnFormat up. Prosta regulacja powyżej i powinieneś być dobry.

    Pełny kod

    component extends="core.core" { 
    
    remote any function loadService() returnFormat="JSON" { 
    
        objResponse = '{"CONFIG":[["internal"],[ "success"]],"DATA":[["Message1"]]}'; 
    
        SerializeJSON(objResponse); 
    
        return objResponse; 
    } 
    
    } 
    
    +0

    Wow, widzę teraz. Zmieszałem format returntype i return. To było głupie. Dodałem returnformat = "JSON" i zadziałało świetnie. Dzięki za pomoc. Bardzo to doceniam. – Sequenzia

    +0

    Na pewno zanotuj komentarz Peruz dotyczący SerializeJSON(). –

    +0

    Powiedzieliście: "Prawidłową składnią CFScript w CF9 jest:", czy jest jakaś dokumentacja dla CFScript ... skąd o tym wiesz? – John

    2

    Również zauważyłem, że masz

    SerializeJSON(objResponse); 
    

    w swojej funkcji. Ta linia nie ma wpływu na powrót funkcji. Tak więc można go łatwo pominąć, ponieważ wartość objResponse znajduje się już w ciągu JSON. Ale, jeżeli wartość objResponse było coś

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

    wtedy mógłby zrobić coś takiego

    return serializeJSON(objResponse); 
    

    który miałby włączyć złożonych danych miałeś na ciąg JSON.

    Oto kompletny funkcja

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

    Dzięki za opinię. Właściwie grałem z umieszczeniem serializeJSON. Pomaga to – Sequenzia

    +0

    +1, dobry połów na tym. –

    1

    Innym sposobem określenia 'returnFormat' byłoby użyć adnotacji:

    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; 
    } 
    } 
    
    Powiązane problemy