我目前正在使用服务器端的lift和d3(一个javascript可视化框架)来实现一个图形可视化工具,用于所有可视化。我遇到的问题是在脚本中我想从服务器获取会话相关数据。
所以基本上,我的目标是在静态 js 脚本中编写提升有效的 ajax 回调。
到目前为止我尝试过的
如果您认为最好的解决方案是我已经尝试过的解决方案,请随时发布详细的答案,告诉我如何准确使用它以及它如何完全解决我的问题。
使用lift在另一个脚本中编写ajax回调并从主脚本中调用它
这种类似于隐藏文本输入的解决方案可能更有可能起作用。但是它并不优雅,这意味着我必须在加载时加载很多脚本,这并不方便。
正如邮件列表上的讨论中所解释的,这似乎是电梯社区中首选的解决方案之一。
REST接口
通常,从 lift 中的 javascript 函数获取数据的方法是创建一个 REST 接口。但是,此界面不会链接到任何会话。这是我从上一个问题中得到的解决方案:Get json data in d3 from lift snippet
将函数作为脚本的参数
另一种解决方案是将 ajaxcallback 作为调用以生成我的图形的主脚本的参数。但是我希望有很多回调,我不想弄乱我的脚本的参数。
在lift中编写整个脚本,然后将其提供给客户端
这个解决方案可以很优雅,但是我的脚本很长,我真的希望它保持静态。
我想要的是
在客户端
在查看我网页的源代码时,我发现 ajaxSelect 的回调是:
<select onchange="liftAjax.lift_ajaxHandler('F966066257023LYKF4=' + encodeURIComponent(this.value), null, null, null)" name="F96606625703QXTSWU" id="node_delete" class="input">
此外,网页末尾还有一个包含页面状态的变量:
var lift_page = "F96606625700QRXLDO";
所以,我想知道是否可以使用这个liftAjax.lift_ajaxHandler
函数来模拟我的 ajaxcall 是有效的。但是我不知道要使用的确切合成器。
在服务器端
由于我在客户端“伪造”了一个请求,我现在想在客户端获取请求并将其分派给正确的函数。这是LiftRules.dispatch
对象似乎是最好的解决方案的地方:当它被调用时,所有会话管理都已完成(请求已验证并链接到会话),但是我不知道如何在append
功能。
评论
在 lift 中,所有变量的名称都更改为随机字符串以提高安全性,我希望在我的应用程序中具有相同的行为,即使这可能意味着我将不得不“给”javascript 这些值。然而,一个 15 个字符串值的数组仍然比 15 个函数作为 javascript 函数的参数更好。
编辑
在跟踪我的研究时,我发现了这个页面:将服务器功能映射到客户端操作,它以某种方式解释了命名函数的目标,即使它仍然没有引导我找到一个可行的解决方案。