我正在尝试重构一个链式 ajax 调用(太链式了),以更简单的方式使用 twig 来分离 HTML、PHP 和 js。 我有类似的东西:
$.ajax({
type: "GET",
dataType: "json",
url: "{{ urlsf }}",// THIS WILL LOAD SOME DATA
success: function (response) {
$.ajax({
type: "POST",
data: { per: response } ,
url: 'renderPage.php',
success: function (cont_contador) {
$('#main_content').html(cont_contador);
}//end of success
});//end of ajax for render call
}//end of success
});//end of ajax that loads data
同样的成功->ajax调用重复了几次,但我认为一次就足以说明我的观点。 renderPage.php 渲染另一个文件,其中有一个 js/jquery 函数和一个使用 twig 函数的 div,另外将响应设置为 twig 变量,将其传递给渲染数组。
在使用 Controller 处理负载时,我将 移动到主库和主 HTML 结构(有 Twig )。
现在,这就是我遇到这些麻烦的地方: 我无法使用 javascript 将响应移动到 twig。 我无法用 javascript 响应变量替换 Twig ,因为这个 Twig 变量正在代码的其他地方使用。 我不想保留 ajax 调用,事实上,我想删除它以仅保留 json 调用。
<小时/>编辑
我将尝试为我正在寻找的内容制定一个架构:
- 主 Controller :加载 php 连接、设置安全性、设置主 Twig 变量并渲染主模板
- 主模板:加载 CSS 和 js 库,其中包括 jquery 和主要 js 自定义函数,使用 include 包含 HTML 和 twig block 主要结构。调用.准备好了
- js 函数:包含与 HTML 关联的事件和函数
实际上有一个由一个事件触发的函数,该函数调用API,返回数据,然后渲染一个部分,该部分触发另一个事件,该事件渲染另一部分,然后触发另一个......可以一次全部触发/加载,但在其中一个渲染中,它保存了网络其他部分使用的一个 Twig 变量。我希望以某种不同的方式启动该 Twig 变量。
最佳答案
为了以后的引用,Twig 的一个小解释:
Twig 是一个模板处理器。模板处理器从另一个文件生成一个 HTML 文件,该文件包含具有以下附加功能的 HTML:
- 变量和函数
- 文本替换
- 文件包含(或嵌入)
- 条件评估和循环
此过程发生在服务器端。客户端仅获取 HTML 结果。 客户端语言(例如 JS)可以直接更改此 HTML,但不能更改未渲染的变量或循环。这是因为 JS 永远看不到这个逻辑。
但是,使用 AJAX,您仍然可以运行服务器端代码。我建议您首先使用数据库中的值设置您的 Twig 变量。每当您在数据库中更改此记录时,所有模板都会更新。
关于javascript - 使用twig重构ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54944544/