Я пытаюсь создать страницу Visualforce, которая отображает информацию (поля) о пользовательских объектах после нажатия кнопки, например так:
Нажатие кнопки активирует метод в моем классе Apex (который действует как расширение контроллера страницы Visualforce). Метод запрашивает пользовательский объект и возвращает строку, которая содержит информацию в формате JSON.
Затем на странице Visualforce у меня есть Javascript, который выводит результат этого метода на страницу с JSON.parse (result) , но я получаю "Неожиданный токен & in JSON в позиции 1 ".
Если я попытаюсь напечатать результат без JSON.parse (), он напечатает строку, но все равно будет в формате JSON (т.е. с фигурными скобками, кавычками, двоеточиями):
Страница 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
Любое понимание очень ценится.