g_scharfenberg
I'm new here

Fehlerhafte Sonderzeichen bei abruf eines JSON Template Sets per $.post

Jump to solution

Hallo

Hier ist was der Plan waere:

Eine Seite generiert eine Navigation von ihrer eigenen position aus. Unterpunkte die weiter fuehren sind als AJAX links angegeben und Unterpunkte die nicht weiterfueren (keine weitere navigation unter sich haben) werden als normale Links dargestellt.

This is the Navigation funktion for that:

<CMS_FUNCTION name="Navigation" resultname="navigator">

            <CMS_PARAM name="expansionVisibility" value="standard" />

            <CMS_PARAM name="wholePathSelected" value="1" />

            <CMS_VALUE_PARAM name='root' value='"pageref:"+#global.node.uid'/>

 

            <CMS_ARRAY_PARAM name="beginHTML">

                      <CMS_ARRAY_ELEMENT index="0..2"><![CDATA[<li>]]></CMS_ARRAY_ELEMENT>

          </CMS_ARRAY_PARAM>

 

          <CMS_ARRAY_PARAM name="endHTML">

                    <CMS_ARRAY_ELEMENT index="0..2"><![CDATA[</li>]]></CMS_ARRAY_ELEMENT>

          </CMS_ARRAY_PARAM>

 

            <CMS_ARRAY_PARAM name="unselectedHTML">

              <CMS_ARRAY_ELEMENT index="0..2"><![CDATA[

                        $CMS_IF(#nav.hasSubFolders)$

                                  <a class="ajax-navigator-link" href="$CMS_VALUE(ref(pageref:#nav.ref.page.uid, templateSet:"json"))$">

                        $CMS_END_IF$

                        $CMS_IF(!#nav.hasSubFolders)$

                                  <a href="$CMS_REF(#nav.ref)$">

                        $CMS_END_IF$

                                  $CMS_VALUE(#nav.label.convert2)$

                        </a>

              ]]></CMS_ARRAY_ELEMENT>

             </CMS_ARRAY_PARAM>

</CMS_FUNCTION>

the .ajax-navigator-link class makes it so javascript takes over and loads the link in the href via $.post. The response is a string with JSON syntax that is then parsed in javascript to update the navigation with the new links.

Up to this point, all of this works.

However... the JSON template set returns the #nav.label.convert2 information with broken special characters. These are not broken by the parseJSON but come back wrong from the server (at least based on the Response debugger of several browsers)

Here's the JSON template code:

<CMS_HEADER>

<CMS_FUNCTION name="Navigation" resultname="navigator">

            <CMS_PARAM name="expansionVisibility" value="standard" />

            <CMS_PARAM name="wholePathSelected" value="1" />

            <CMS_VALUE_PARAM name='root' value='"pageref:"+#global.node.uid'/>

 

            <CMS_ARRAY_PARAM name="beginHTML">

                      <CMS_ARRAY_ELEMENT index="0..2"><![CDATA[

                                {

                      ]]></CMS_ARRAY_ELEMENT>

          </CMS_ARRAY_PARAM>

 

          <CMS_ARRAY_PARAM name="endHTML">

                    <CMS_ARRAY_ELEMENT index="0..2"><![CDATA[

                              }

                              $CMS_IF(!#nav.isLast)$

                                        ,

                              $CMS_END_IF$

                    ]]></CMS_ARRAY_ELEMENT>

          </CMS_ARRAY_PARAM>

 

            <CMS_ARRAY_PARAM name="unselectedHTML">

              <CMS_ARRAY_ELEMENT index="0..2"><![CDATA[

                        $CMS_IF(!#nav.hasSubFolders)$

                                  $CMS_SET(href, ref(pageref:#nav.ref.page.uid, templateSet:"html"))$

                        $CMS_ELSE$

                                  $CMS_SET(href)$

                                            $CMS_REF(#nav.ref)$

                                  $CMS_END_SET$

                        $CMS_END_IF$

   

                        "label":"$CMS_VALUE(#nav.label.convert2)$", "href":"$CMS_VALUE(href)$"

              ]]></CMS_ARRAY_ELEMENT>

             </CMS_ARRAY_PARAM>

</CMS_FUNCTION>

</CMS_HEADER>

{

          "nav":

                    $CMS_IF(!navigator.isEmpty)$

                              [

                                        $CMS_VALUE(navigator)$

                              ]

                    $CMS_ELSE$

                              []

                    $CMS_END_IF$

}

Es sollte eigentlich die selben Daten auswerfen wie das HTML template (beide sind uebrigens auf html basis, nicht xml oder pdf, falls das relevant ist). Aber es kommt einfach nicht richtig durch.

Laut Dokumentation sollte die .convert2 funktion das Problem beheben. Tut sie aber leider nicht.

Die Frage waere also welche moeglichkeiten es gibt zu testen wo der Fehler liegt. Oder falls es ein bekanntes oder erklaerbares Problem ist, wie es zu umgehen waere.

0 Kudos
1 Solution

Accepted Solutions
cthomas
I'm new here

Hi, wie genau werden den die Sonderzeichen geliefert? Da JSON im Browser UTF-8 kodiert sein muss - am besten noch mal prüfen, ob für die Sprachen im ServerManger unter Projekt bearbeiten auch das HTML-Encoding auf UTF-8 steht.

View solution in original post

0 Kudos
1 Reply
cthomas
I'm new here

Hi, wie genau werden den die Sonderzeichen geliefert? Da JSON im Browser UTF-8 kodiert sein muss - am besten noch mal prüfen, ob für die Sprachen im ServerManger unter Projekt bearbeiten auch das HTML-Encoding auf UTF-8 steht.

0 Kudos