问题
I get an error when save a page in page editor.. Somehow when I edited the page from presentation > detail and display it in page editor it works fine.. The error logs is in below here..
ERROR After parsing a value an unexpected character was encountered: {. Path 'scLayout', line 38, position 85. Exception: Newtonsoft.Json.JsonReaderException
Message: After parsing a value an unexpected character was encountered: {. Path 'scLayout', line 38, position 85. Source: Newtonsoft.Json
at Newtonsoft.Json.JsonTextReader.ParsePostValue()
at Newtonsoft.Json.JsonTextReader.ReadInternal()
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
at Sitecore.ExperienceEditor.Speak.Server.Requests.PipelineProcessorRequest`1.Process(RequestArgs requestArgs)
Any kind of thought or solution may help
Thanks
回答1:
This is being caused by a confirmed bug in Sitecore. (reference # 84051 when opening a ticket)
You can resolve this yourself, but I still recommend going through Sitecore so they can ensure that you have what you need.
To solve, look at the /sitecore/shell/client/Sitecore/ExperienceEditor/ExperienceEditor.js
file, on line 510 you will see that decodeURIComponent
is being called twice.
Updating it to only be called once like data: decodeURIComponent(JSON.stringify(commandContext))
will resolve the error.
Likewise, a change is required in the /sitecore/shell/client/Sitecore/ExperienceEditor/RibbonPageCode.js
file on line 24.
Here, adding the decodeURIComponent
method call is what fixes this file. So like this: ribbonUrl: decodeURIComponent(this.PageEditBar.get("url")),
This probably addresses the Coveo issue as well, but my clients are not currently using Coveo, so I can't verify that.
回答2:
This post fixed for me. Note I'm using Sitecore 8.2 Update 2
My error:
After parsing a value an unexpected character was encountered: {. Path 'scLayout', line 1, position 2246.
http://jockstothecore.com/experience-editor-error/
postServerRequest: function (requestType, commandContext, handler, async) {
function normalizeDeviceProp(d) {
if (typeof(d) !== "object")
throw new Error("Unexpected presentation details XML: cannot find device property");
if (d instanceof Array)
return d;
var normalized = [];
normalized.push(d);
return normalized;
}
var token = $('input[name="__RequestVerificationToken"]').val();
// Custom Brainjocks code to fix Experience Editor error.
var ajaxData = unescape(JSON.stringify(commandContext));
if (commandContext && commandContext.scLayout) {
var obj = JSON.parse(commandContext.scLayout);
if (obj && obj.r) {
normalizeDeviceProp(obj.r.d).forEach(function (d) {
if (d.r instanceof Array) {
d.r.forEach(function (r) {
var val = r["@par"];
if (val && val.length > 0) {
ajaxData = ajaxData.replace(unescape(val), val);
}
});
}
});
}
}
jQuery.ajax({
url: "/-/speak/request/v1/expeditor/" + requestType,
data: {
__RequestVerificationToken: token,
data: ajaxData
},
success: handler,
type: "POST",
async: async != undefined ? async : false
});
}
回答3:
Check the content of all of the fields being saved. The Experience/Page editor has to serialize everything into a json object to call its own internal API's. There might be a stray character in one of your fields tripping up the json serializer. I ran into this when the content editor had copy and pasted their content from elsewhere.
来源:https://stackoverflow.com/questions/35029713/save-return-error-in-sitecore-page-editor