【问题标题】:Avoiding wrappers in AJAX response using Catalyst使用 Catalyst 避免 AJAX 响应中的包装器
【发布时间】:2017-06-11 03:41:18
【问题描述】:

我正在尝试使用催化剂处理 AJAX 请求,以通过 jQuery 解析一些动态 html 生成。简单地说,我需要填写一个<select> </select> 标记(通过jQuery 创建,连同其他一些字段,在用户输入上)。为了填充这个标签,我想我可以扩展创建标签的代码块来对我需要的数据执行一个简单的 AJAX 请求......像这样的东西:

 $.post("../ajax/simple_query", 'get="family_precedents"' );

然后像往常一样使用 Catalyst::Request 在 perl 脚本上处理这个非常简单的请求。

问题在于 AJAX 响应包含 Catalyst App 包装器,这使得理解和使用都非常混乱。 有什么方法可以避免使用催化剂对 AJAX 响应进行包装?

【问题讨论】:

  • 包装器是指您的模板包装器?您的内容是 HTML 块?它是通过模板创建的,还是直接在控制器中设置?请edit您的问题并包括呈现页面的控制器部分和模板。
  • 是的,我的意思是模板包装器。 ajax 响应创建的内容更像是一个包含我在 javascript 中直接解析的各种值的字符串。
  • 如果它甚至不是由您的模板创建的,那么您也可以使用不同的视图。对于 aja[xj],您通常会使用 metacpan.org/pod/Catalyst::View::JSON
  • 是的!如果我必须处理更多的 AJAX 请求,我实际上会考虑这个选项。这应该是一个快速修复,我不熟悉 JSON(尽管我确实认识到它是一个很棒的工具:P)。非常感谢您的提示:)
  • 快速修复是一种让你以后生活困难的事情。使用 json 视图。制作它需要你一分钟,然后你只需要控制器中的两行代码。其余的将正常工作。你把你的 Perl 数据结构放在 stash 中,它就变成了 json。在前端,您的 jquery 只是将其视为 Javascript 变量。

标签: jquery ajax perl catalyst


【解决方案1】:

我找到了更多深入研究催化剂文档的答案。事实证明,您可以将包装器配置为有条件地显示,如下所示:

[% IF no_wrapper or template.name.match('\.(css|js|txt)');
  debug("Passing page through as text: $template.name");
  content;
 ELSE;
  debug("Applying HTML page layout wrappers to $template.name\n");
  content WRAPPER site/html + site/layout;
 END; -%]

然后将 no_wrapper 值与 $c->stash->{no_wrapper}

一起发送

来源:http://wiki.catalystframework.org/wiki/gettingstarted/howtos/disabling_a_tt_wrapper_for_ajax_requests

【讨论】:

  • 我正要写那个。干得好,你自己找到了。 :)
  • 但您也可以为 AJAX 内容构建不同的视图。我相信有些用例是有意义的。
猜你喜欢
  • 2014-04-16
  • 2021-12-20
  • 2012-09-09
  • 2012-10-26
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多