Отображение содержимого JSON на странице Visualforce с помощью Javascript Remoting - непредвиденная ошибка токена - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь создать страницу Visualforce, которая отображает информацию (поля) о пользовательских объектах после нажатия кнопки, например так:

enter image description here

Нажатие кнопки активирует метод в моем классе Apex (который действует как расширение контроллера страницы Visualforce). Метод запрашивает пользовательский объект и возвращает строку, которая содержит информацию в формате JSON.

Затем на странице Visualforce у меня есть Javascript, который выводит результат этого метода на страницу с JSON.parse (result) , но я получаю "Неожиданный токен & in JSON в позиции 1 ".

Если я попытаюсь напечатать результат без JSON.parse (), он напечатает строку, но все равно будет в формате JSON (т.е. с фигурными скобками, кавычками, двоеточиями): enter image description here

Страница Visualforce:

<apex:page title="VF Page" standardController="case" extensions="ControllerExtension">

<apex:includeScript value="{!$Resource.JQueryJs}"/>


<script type="text/javascript">
    function getRemoteInfoJSON() {
        var var1 = "{!case.Var1__c}";
        var var2 = "{!case.Var2__c}";

        Visualforce.remoting.Manager.invokeAction(
            '{!$RemoteAction.ControllerExtension.getInfoJSON}', var1, var2, 
            function(result, event){
                if(event.status){
                    try {
                        document.getElementById("pushDataHere").innerHTML = JSON.parse(result); //produces error; if we just use 'result' instead of 'JSON.parse(result)', the string is printed in JSON format, with curly braces and such.
                    }catch(err) {
                        document.getElementById("pushDataHere").innerHTML = err.message;
                    }
                }
            }
        );
    };
</script>

<button onclick="getRemoteInfoJSON()">BUTTON</button> <br /> <br />
<div id="pushDataHere">
</div>

</apex:page>

Метод из класса Apex (расширение):

@RemoteAction
global static String getInfoJSON(String var1, String var2){
    sObject record = [SELECT <lots of fields> FROM Custom_Object__c WHERE Platform__c = :var1 AND ParentProductId__c = :var2];
    Map<String, Schema.SObjectField> fieldMap = Schema.getGlobalDescribe().get('Custom_Object__c').getDescribe().fields.getMap();

    Map<String, String> contents = new Map<String, String>();
    for(String fieldName : fieldMap.keySet()){
        try{
            String fieldLabel = fieldMap.get(fieldName).getDescribe().getLabel();
            String fieldContents = String.valueOf(record.get(fieldName));
            //We only want to add to our Contents list if the field has something in it
            if (fieldContents != null){
                contents.put(fieldLabel, fieldContents);
            }
        } catch (SObjectException e){
            System.debug('Whoopsie'); //Occurs when we try to retrieve contents of a field we didn't query in the 'record' variable.
        }
    }
    return JSON.serialize(contents); //returns '{"Field1": "Value1","Field2": "Value2", "Field3": "Value3", "Field4": "Value4", "Field5": "Value5", "Field6": "Value6", "Field7": "Value7", "Field8": "Value8", "Field9": "Value9", "Field10": "Value10","Field11": "Value11","Field12": "Value12","Field13": "Value13","Field14": "Value14"}'
}

Строка, возвращаемая классом Apex:

{
    "Field1": "Value1",
    "Field2": "Value2",
    "Field3": "Value3",
    "Field4": "Value4",
    "Field5": "Value5",
    "Field6": "Value6",
    "Field7": "Value7",
    "Field8": "Value8",
    "Field9": "Value9",
    "Field10": "Value10",
    "Field11": "Value11",
    "Field12": "Value12",
    "Field13": "Value13",
    "Field14": "Value14"
}

Ошибка, полученная при нажатии кнопки:

Unexpected token & in JSON at position 1

enter image description here

Любое понимание очень ценится.

...