- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在服务器端使用 lift 和 d3(javascript 可视化框架)实现图形可视化工具,以实现所有可视化。我遇到的问题是在脚本中我想从服务器获取 session 相关数据。
基本上,我的目标是在静态 js 脚本中编写提升有效的 ajax 回调。
如果您认为最好的解决方案是我已经尝试过的,请随时发布详细的答案,告诉我如何准确使用它以及它如何完全解决我的问题。
这个类似于隐藏文本输入的解决方案可能更有效。然而,它并不优雅,这意味着我必须在加载时加载很多脚本,这并不是很方便。
这似乎是电梯社区中首选的解决方案之一,如 this discussion on the mailing list. 中所述。
通常,要从 lift 中的 javascript 函数获取数据,我们会创建一个 REST 接口(interface)。但是,此界面不会链接到任何 session 。这是我从上一个问题中得到的解决方案:Get json data in d3 from lift snippet
另一种解决方案是将 ajaxcallback 作为主脚本的参数,调用它来生成我的图形。但是我希望有很多回调,我不想弄乱我的脚本的参数。
这个解决方案可以很优雅,但是我的脚本很长,我真的更希望它保持静态。
在查看我的网页的源代码时,我发现 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 是否有效。但是我不知道要使用的确切语法。
由于我在客户端“伪造”了一个请求,我现在想在客户端获取请求并将其分派(dispatch)给正确的函数。这就是 LiftRules.dispatch
对象似乎是最佳解决方案的地方:调用它时,所有 session 管理都已完成(请求已验证并链接到 session ),但我不知道如何在 append
函数中编写正确的代码。
在 lift 中,所有变量名称都更改为随机字符串以提高安全性,我希望在我的应用程序中有相同的行为,即使这可能意味着我将不得不“给” javascript 这些值。然而,15 个字符串值的数组仍然比 15 个函数作为 javascript 函数的参数更好。
在进行研究时,我发现了这个页面:Mapping server functions to client actions它以某种方式解释了命名函数的目标,即使它仍然没有引导我找到可行的解决方案。
最佳答案
Rest in Lift 不必是无状态的。如果您使用 LiftRules.dispatch.append 注册您的 RestHelper,那么它将被有状态地处理并且 session 信息将像往常一样通过 S 对象可用。
既然你看起来很感兴趣,而且它之前已经出现在 SO 上,这里更详细地解释了如何在 Lift 中注册和调用服务器端函数。如果您有一段时间没有使用 Lift,请将视线移开。以下内容不应以任何方式用于评估 Lift 或其复杂性。这纯粹是图书馆开发人员级别的东西,大多数 Lift 用户在没有意识到这一点的情况下幸福地进行他们的开发。
当您创建有状态回调时,通常是通过使用 SHtml 对象中的方法,您真正要做的是在用户 session 的上下文中注册 S.AFuncHolder 类型的对象,每个对象都有一个唯一的 ID。在此过程中生成的唯一 ID 就是您在遇到类似 F96606625700QRXLDO
的模式时所看到的。当通过表单发布、ajax 或其他方式提交数据时,Lift 将检查对这些函数 ID 的请求,并在它们存在时执行相关函数。有几个助手提供更具体类型的 AFuncHolder,如 S.SFuncHolder(接受单个字符串查询参数)和 S.BinFuncHolder(参数是多部分表单数据),但它们都返回 Any 并且在幕后 Lift 将收集这些返回值创建适当类型的响应。例如,JsCmd 将导致执行命令的 JavaScriptResponse。您也可以直接返回 LiftResponse。
AFuncHolders 是使用 S.fmapFunc 方法注册的。你会这样调用它
S.fmapFunc(SFuncHolder({ (str: String) =>
doSomethingAwesomeWithAString(str)
}))(id => <input type="text" name={id} value=""/>)
第一个参数是你的函数,包装在正确的 *FuncHolder 类型中,第二个参数是一个函数,它接受生成的 id 并输出一些东西。获取输出的东西 就是您要包含在页面上的内容。它应该以某种方式导致将 id 作为查询参数发送到服务器,以便执行您的函数。
您可以使用上面的方法进行自己的 Ajax 调用,但是当 Lift 进行 ajax 调用时,还有一些其他注意事项:
1) 大多数浏览器只允许这么多同时连接到给定的域。三似乎是一个神奇的数字。2) AFuncHolders 通常会关闭它们所包含的片段的范围,如果同时处理多个 ajax 请求,每个请求都在自己的线程中,可能会发生不好的事情。
为了解决这些问题,liftAjax.lift_ajaxHandler
函数对每个 ajax 请求进行排队,确保一次只有一个请求发送到服务器。
这种方法的缺点是,它可能难以进行需要将结果传递给回调的 Ajax 调用。例如,JQuery 自动完成在接受匹配列表的输入更改时提供回调函数。但是,如果您手动调用 LiftAjax.lift_ajaxHandler,则可以提供自己的成功和错误回调函数,我建议您在浏览器中查看这些函数的源代码,以了解有关它们如何工作的更多信息。
实际上还有更多内容,例如 Lift 如何在 ajax 回调中恢复 RequestVars(这就是 lift_page 的用武之地,但这就是我准备在周六早上边喝咖啡边解释的全部内容:)
祝您的应用程序好运!
关于javascript - 从静态 javascript 中提升 session 有效的 ajax 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429871/
有人有 Comet 应用程序 .net 的任何样本吗? 我需要一个示例如何在服务器中保持客户端的连接? 最佳答案 这里也有一些不错的: http://www.frozenmountain.com/we
我想知道是否有 Yii2 专家可以帮助我了解如何最好地使用 ajax 表单与 Yii ajax 验证相结合。我想我可以在不带您阅读我所有代码的情况下解释这个问题。 我正在处理一个促销代码输入表单,用户
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
f:ajax 和 a4j:ajax 标记之间有什么显着差异吗? 我知道 Richfaces 4 中的 a4j:ajax 基于 native f:ajax JSF2 标记,添加了一些 f:ajax 中未
我已经尝试过这样但无法获取数组列表。它返回“null” var data=[]; data[0] = '1'; data[1] = '2'; $.ajax({
在教程中可以看到 jQuery.ajax 和 $.ajax 喜欢这里 http://www.thekludge.com/form-auto-save-with-jquery-serialize/ jQ
过度使用 AJAX 会影响性能吗?在大型 Web 应用程序的上下文中,您如何处理 AJAX 请求以控制异步请求? 最佳答案 过度使用任何东西都会降低性能;在必要时使用 AJAX 将提高性能,特别是如果
似乎我无法使用 Ext.Ajax.request 进行跨域 ajax 调用。看起来 ScriptTag: True 没有任何效果。 这是我的代码: {
我正在使用 Bottle 微框架(但我怀疑我的问题来自它) 首先,如果我定义了一个从/test_redirect 到/x 的简单重定向,它会起作用。所以 Bottle redirect() 在简单的情
任何人都可以指出各种 AJAX 库的统一比较吗?我已经阅读了大约十几种不同的书,我即将开始一个项目,但我对自己是否已经探索了可能性的空间没有信心。 请注意,我不是在要求“我认为 XXX 很棒”——我正
似乎使用 AJAX 的站点和应用程序正在迅速增长。使用 AJAX 的主要原因之一可能是增强用户体验。我担心的是,仅仅因为项目可以使用 AJAX,并不意味着它应该。 可能是为了 UX,AJAX 向站点/
假设我有一个可以通过 Javascript 自定义的“报告”页面。假设我有可以更改的 start_date、end_date 和类型(“简单”或“完整”)。现在 我希望地址栏始终包含当前(自定义) V
我一直在阅读 Ajax 并且希望从 stackoverflow 社区看到我是否正确理解所有内容。 因此,正常的客户端服务器交互是用户在 url 中拉出 Web 浏览器类型,并将 HTTP 请求发送到服
这可能有点牵强,但让我们假设我们需要它以这种方式工作: 我在服务器的 web 根目录中有一个 index.html 文件。该文件中的 javascript 需要向/secure/ajax.php 发出
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 去年关闭。 Improve this
我希望ajax post成功进入主页。由于某种原因,我一直做错事。知道我应该做什么来解决这个问题吗? window.APP_ROOT_URL = ""; Ajax $.ajax({ url: '#{a
我在 2 个不同的函数中有 2 个 ajax 调用。我想用.click来调用这2个函数。 func1 将数据插入数据库,然后 func2 检索数据,所以我的问题是如何等到 func1 完全完成然后只执
我试图在单击按钮后禁用该按钮。我尝试过: $("#ajaxStart").click(function() { $("#ajaxStart").attr("disabled", true);
我试图在每个 Ajax 请求上显示加载动画/微调器 我的 application.js $(document).on("turbolinks:load", function() { window.
我正在显示使用jQplot监视数据的图形。 为了刷新保存该图的div,我每5秒调用一次ajax调用(请参见下面的JavaScript摘录)。 在服务器上,PHP脚本从数据库中检索数据。 成功后,将在5
我是一名优秀的程序员,十分优秀!