Ace编辑器-通过POST在服务器上保存/发送会话 [英] Ace editor - save/send session on server via POST

查看:226
本文介绍了Ace编辑器-通过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()

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.

I尝试通过POST数据将会话发送到服务器,但是在网络控制台中,我仅看到来自编辑器的代码,仅此而已...

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆