【问题标题】:Save Return Error in Sitecore Page Editor在 Sitecore 页面编辑器中保存返回错误
【发布时间】:2016-01-27 05:45:42
【问题描述】:

在页面编辑器中保存页面时出现错误。不知何故,当我从演示文稿>详细信息编辑页面并将其显示在页面编辑器中时,它工作正常。错误日志在下面这里..

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)

任何想法或解决方案都可能有所帮助

谢谢

【问题讨论】:

  • 您在项目中使用 coveo 吗?如果是,请检查此链接:developers.coveo.com/display/public/SitecoreV3/…
  • 不,我不使用 Coveo,我的站点核心是 8.1 版。并且有不同的行错误(第 38 行,第 85 位)。虽然,我已经在那个链接上做了这件事,但它没有用

标签: c# json sitecore sitecore8 sitecore-mvc


【解决方案1】:

这是由 Sitecore 中已确认的错误引起的。 (开票时参考#84051)

您可以自己解决此问题,但我仍然建议您通过 Sitecore,这样他们就可以确保您拥有所需的东西。

要解决这个问题,请查看 /sitecore/shell/client/Sitecore/ExperienceEditor/ExperienceEditor.js 文件,在第 510 行,您会看到 decodeURIComponent 被调用了两次。

data: decodeURIComponent(JSON.stringify(commandContext)) 一样将其更新为只被调用一次将解决该错误。

同样,需要对第 24 行的 /sitecore/shell/client/Sitecore/ExperienceEditor/RibbonPageCode.js 文件进行更改。

在这里,添加 decodeURIComponent 方法调用是修复此文件的方法。所以像这样:ribbonUrl: decodeURIComponent(this.PageEditBar.get("url")),

这可能也解决了 Coveo 问题,但我的客户目前没有使用 Coveo,所以我无法验证。

【讨论】:

  • 救命稻草!这需要我很长时间才能找到。你有 #84051 票的链接吗?
  • 抱歉@DavidMasters,无法提供指向帮助台的链接。如果您使用新票联系支持人员并参考该号码,他们应该能够为您提供正确的修复。修复仅包括更新的 js 文件。但建议通过它们,以防在您的个人解决方案中可能需要调整其他任何内容。
  • 好的,只是想知道最新版本是否修复了它。目前,我已将手动编辑的 .js 文件添加到我们的 VS 解决方案中。我只是意识到,如果我们在任何时候升级 sitecore,但继续发布我过时的文件版本,这可能会带来麻烦。
  • 自 8.1 更新 1 起未修复。
  • Sitecore 错误已在 Sitecore 8.1 Update-2 中修复。
【解决方案2】:

这篇文章是为我修复的。 注意我使用的是 Sitecore 8.2 Update 2

我的错误:

After parsing a value an unexpected character was encountered: {. Path 'scLayout', line 1, position 2246.

http://jockstothecore.com/experience-editor-error/

如果上面的链接确实有效,说明是:

编辑文件 [Website]/sitecore/shell/client/Sitecore/ExperienceEditor/ExperienceEditor.js 并用此更新版本替换 postServerRequest 函数的代码。

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
    });
}

【讨论】:

  • 在 8.2.3 中为我解决了这个问题,问题是,在渲染参数中,如果我添加图像,则无法保存页面(它给出错误)。这个修复修复了它!
【解决方案3】:

检查正在保存的所有字段的内容。体验/页面编辑器必须将所有内容序列化为 json 对象以调用其自己的内部 API。您的一个字段中可能有一个杂散字符会触发 json 序列化程序。当内容编辑器从其他地方复制并粘贴他们的内容时,我遇到了这个问题。

【讨论】:

  • 我不这么认为。因为我知道给出错误的字段并且我已经检查它是否有杂散字符..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多