0

我们正在将应用程序从 Lasso 8 转换为 Lasso 9,作为中间步骤,已从 8.5.5 升级到 8.6.2(在我们的新机器上与 9 一起运行在不同的虚拟主机中)。

我发现在 8.6.2 中,我们在调用encode_json. 这些错误的奇怪之处在于它们直到站点启动后的一段时间才开始发生。然后,几个小时后,所有encode_json调用都开始失败,并出现如下错误消息:

An error occurred while processing your request.
Error Information

Error Message: No tag, type or constant was defined under the name "〰〲⵽硜㉻紱硜㉻紳尭筸戵屽筸搵⵽硜" with arguments: array: (pair: (-find)=([\x{0020}-\x{21}\x{23}-\x{5b}\x{5d}-\x{10fff}])), (r)
at: onCompare with params: 'r'
at: JSON with params: 'reload', -Options=array: (-Internal)
at: JSON with params: @map: (reload)=(false), (tcstring)=(LZU), (timestring)=(10:42 AM   1442Z)
at: [...].lasso with params: 'pageloadtime'='1383038310' on line: 31 at position: 1
Error Code: -9948

(是的,那些中文(?)字符在错误消息中。)我已经从 LassoStartup 中删除了8.5.5 encode_json 标签,所以我们使用了正确的内置方法。encode_json 方法对于我抛出的任何和所有参数都失败,从简单的字符串到地图数组。重新启动站点后,encode_json 会恢复工作一两个小时,这似乎取决于负载。

在 8.5.5 上,我们没有这个问题。有没有人有这个问题的经验?关于尝试8.5.5 标记交换 encode_json以查看我是否可以覆盖内置方法的任何建议?也许它会更好地工作?

4

4 回答 4

1

LassoTalk的Rick提供了以下信息:

嗨贾斯汀,

我忍不住在 8 月份的另一个线程中回忆了这个主题 - 该线程的最终结果似乎是一个错误报告。

http://lasso.2283332.n4.nabble.com/Encode-JSON-error-td4639201.html

美好祝愿,

瑞克

于 2013-10-30T04:38:06.617 回答
1

从LassoSoft 下载升级到 8.6.2 的“-3”补丁似乎已经完全解决了这个问题。

-贾斯汀

于 2013-10-30T21:50:16.523 回答
0

看看您在启动时使用的 8.5.5 代码是否可以工作会很有趣。如果它与 TagSwap 上的标签相同,那么我将执行以下操作:

  1. 删除检查以查看它是否已经存在(如果:(Lasso_TagExists:'Encode_JSON')== False;)

  2. 在方法定义中添加“-Priority='Replace'”(Define_Tag: 'JSON', -Namespace='Encode_', -Priority='Replace', ....)

请注意,我不确定内置方法是否像上面那样使用命名空间,或者它们是否只使用“define_tag('encode_json')”。出于这个原因,我建议首先尝试将内置方法替换为仅返回“It Works!”的方法。这将允许您对其进行测试并确保您正在替换已定义的方法。一旦你有正确的标签定义来替换它,然后让它做它的事情。

于 2013-10-30T12:26:42.260 回答
0

您可以尝试以下我从互联网上找到并使用的代码。

它对我有用。

<?LassoScript
define_tag('jsonHash', -required='input',-type='array',
    -description='Takes a Lasso Array and outputs a json Hash. Lassosoft offers a complex json type but, not needed in this case.
    Outputs name/value pairs.This can and should be moved to a common location with other custom tags.');

    local('ret'='[');
    local('this'=string);
    iterate: #input, local:'x';
        local:'xSize' = #x->size;
        #this += '{';
        iterate: #x, local:'i';
            #this += '"' + #i->first + '":"' + decode_html(#i->second) + '"';
            if: #xSize != loop_count;
                #this += ",";
            /if;
        /iterate;
        #this += '}';
        if(#input->size != loop_count);
            #this += ',';
        /if;
    /iterate;

    #ret += #this + ']';
    return(#ret);
/define_tag;

encode_json("Arguement");
?>

希望它可以帮助你。

谢谢

于 2013-12-11T06:58:41.223 回答