Ace 编辑器 - 通过 POST 在服务器上保存/发送会话 [英] Ace editor - save/send session on server via POST
问题描述
我编写在线网页编辑器,我想在服务器上保存当前视图/工作,以备将来恢复.我也想做多个标签.
I write online webpage editor and I would like save current view/work on server, for restore in future. I also want do multiple tabs.
我知道,那就是 editor.getSession()
和 editor.setSession()
.
I know, that is editor.getSession()
and editor.setSession()
.
JS:
var editor = ace.edit("description");
editor.session.setMode("ace/mode/javascript");
editor.setTheme("ace/theme/tomorrow");
editor.setShowPrintMargin(false);
editor.setOptions({
enableBasicAutocompletion: true,
enableSnippets: true
});
现在我尝试通过 jQuery $.data()
将会话保存到元素:
Now I try save session via jQuery $.data()
to element:
$('#tab1').data('sesi',editor.getSession()); //save session
editor.setSession($('#tab2').data('sesi')); //restore other session
但是这段代码不起作用.当我尝试 console.log(editor.session);
我在控制台看到很多代码.
But this code not working. When I try console.log(editor.session);
I see a lot of code in console.
我尝试通过 POST 数据将 session
发送到服务器,但在网络控制台中,我只看到来自编辑器的代码,仅此而已......
I tried send session
to server via POST data, but in network console I see only code from editor and nothing more...
$.ajax({
type: "POST",
url: "aaaaa.php",
cache: false,
timeout: 10000,
data: "session="+ editor.session
});
如何将会话保存到变量或服务器?
How to save session to variable or to server?
推荐答案
要将会话保存到服务器,您需要将其转换为可以传递给 json.Stringify 的普通对象.session="+ editor.session
在你的例子中只是调用 session.toString,它与 session.getValue 相同
to save session to server you need to convert it to plain object which can be passed to json.Stringify. session="+ editor.session
in your example simply calls session.toString which is same as session.getValue
var filterHistory = function(deltas){
return deltas.filter(function (d) {
return d.group != "fold";
});
}
sessionToJSON = function(session) {
return {
selection: session.selection.toJSON(),
value: session.getValue(),
history: {
undo: session.$undoManager.$undoStack.map(filterHistory),
redo: session.$undoManager.$redoStack.map(filterHistory)
},
scrollTop: session.getScrollTop(),
scrollLeft: session.getScrollLeft(),
options: session.getOptions()
}
}
sessionFromJSON = function(data) {
var session = require("ace/ace").createEditSession(data.value);
session.$undoManager.$doc = session; // workaround for a bug in ace
session.setOptions(data.options);
session.$undoManager.$undoStack = data.history.undo;
session.$undoManager.$redoStack = data.history.redo;
session.selection.fromJSON(data.selection);
session.setScrollTop(data.scrollTop);
session.setScrollLeft(data.scrollLeft);
return session;
};
现在获取会话状态
var session = editor.session
var sessionData = sessionToJSON(session)
$.ajax({
type: "POST",
url: "aaaaa.php",
cache: false,
timeout: 10000,
data: JSON.stringify(sessionData)
});
并从服务器恢复它
var session = sessionFromJSON(JSON.parse(ajaxResponse))
editor.setSession(session)
这篇关于Ace 编辑器 - 通过 POST 在服务器上保存/发送会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!