从json数组设置twig变量

时间:2018-03-06 17:22:25

标签: javascript jquery ajax symfony twig

随着twig在任何javascript之前渲染,我遇到了一个小问题。

我需要在我从JSON数组接收的twig中设置一个变量,但是我遇到了一些问题,我觉得这应该很简单。

数据通过json数组通过symfony传递给twig,并根据数组中的一个元素呈现不同的消息;这部分没有问题。

我可以将输出打印到twig文件;工作正常。问题是我很难将其设置为树枝变量,以便我可以在几个地方使用它。

这很好用:

$('.id').html(items[0].id);

并正确打印到树枝上:

<div class="id"></div>

我试着这样做:

{% set requestid = '<div class="id"></div>' %}
{{ requestid }}

但正如预期的那样,这只会使HTML没有值。

我一直试图做这样的事情:

在树枝上我有这个:

{% set requestid = "request_holder" %}
{{ requestid }}

在jquery中,我有类似的东西:

var reqid = items[0].id;
reqid.replace("request_holder",reqid);

我也试过这样的事情

var request_id = items[0].id;
window.location = request_id.replace("request_holder",request_id)

我觉得我错过了一小块。

**为了清晰起见编辑**

JSON数组正在解析JSON数组。

我的值为items[0].id

此处进行额外编辑 - 明确表示我感到困惑:清理一点以免将未来读者送错路径

我相信[d]需要在javascript中分配变量,因为twig是php,它是在javascript之前生成的。

我一直试图在javascript中生成树枝无济于事。

这是我一直在尝试的事情:

var requestitem = items[0].id;
$('.id').html("{% set requestId = " + requestitem + " %} <br/> {{ requestId }}");

这将requestId定义为字符串,仅将+ requestitem +返回到页面上。

当我尝试这个时(没有引号)

var requestitem = items[0].id;
$('.id').html("{% set requestId = requestitem %} <br/> {{ requestId }}");

树枝根本无法识别requestitem

我试图引用小枝括号(例如"{" + "%"等),但这当然只会将它们打印到页面上而不会解释它们。

2 个答案:

答案 0 :(得分:1)

服务器端的Twig进程。它需要变量并将它们呈现为HTML和文本。浏览器中显示的内容只是HTML / text /和Javascript。因此,您的set requestid = "request_holder"{{ requestid}}在访问浏览器之前就会转向文字。

之后,您在前端有HTML和文本,Javascript可以与之交互。如果您需要在前端更改此ID,则需要在Javascript中完成。

你在使用id做什么?

答案 1 :(得分:0)

感谢ASOlivieri的暗示,我能够意识到我做错了什么。我把它放在这里以防万一有人碰到这个。我只是在寻找一种方法来创建一个变量并使其可重用(我没有详细介绍,因为这似乎是无关紧要的)。

数据仅在JSON数组中可用,因此任何将其写入twig文件的尝试都会失败,因为它已经转换为HTML,所以我不得不找到另一种解决方案,

我能够将变量保存在javascript中,就像我之前一样

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="loc-checkboxs">
  <label for="usa">
			<input class="loc-check" type="checkbox" id="usa" value="usa" onchange="changeImg(this)"/>
			<span><img id="img-usa" src="https://uploads-ssl.webflow.com/57e5747bd0ac813956df4e96/5a2f052996bde90001f96632_united-states-of-america.svg"><span>
		</label>
  <label for="canada">
			<input class="loc-check" type="checkbox" id="canada" value="canada" onchange="changeImg(this)"/>
			<span><img id="img-canada" src="https://uploads-ssl.webflow.com/57e5747bd0ac813956df4e96/5a2cd7b0937442000184b147_canada.svg"><span>
		</label>
  <label for="uk">
			<input class="loc-check" type="checkbox" id="uk" value="uk" onchange="changeImg(this)"/>
			<span><img id="img-uk" src="https://uploads-ssl.webflow.com/57e5747bd0ac813956df4e96/5a985a90ec8f79000104514a_united-kingdom.svg"><span>
		</label>
</div>
<div class="new-div-wrapper">
  <div class="new-div">
    <img id="loc-selected"></img>
  </div>
</div>

由于我最初的目标是获得通过php更新应用程序的价值,我只需要在AJAX调用中使用此变量,并将其传递到我想要在twig中使用的路径。这是一个简短的总结:

var request_item = items[0].id;