在 Smarty 中定义 AJAX 返回的格式

Define in Smarty the format to be returned by AJAX

我在 Smarty 模板中有一个 html 表单。表单中的 select 通过 AJAX 填充。我想在 Smarty 模板中指定由 AJAX 调用 return 编辑的格式。这样我就可以为不同的目的使用相同的请求-url。例如,如果 select 包含用户,有时我可能想知道用户的电子邮件地址(格式:"{$Option->GetName()} ({$Option->Email})"),有时我可能想知道用户的组织(格式:"{$Option->GetName()} ({$Option->Organisation})")。

关于如何实现这一点,我有一些想法:

  1. 将格式存储在模板中的html/js中。然后 AJAX-调用可以连同请求一起发送所需的 return-格式。 缺点:恶意用户可以更改请求中的格式,这可能是一个安全问题。
  2. 传递整个 $Option 对象,并使用 JavaScript 进行格式化。 缺点:不能使用PHP对象的方法,例如$Option->GetName().
  3. 将格式存储在单独的模板文件中,并在 html/js 中引用此文件并与 AJAX 请求一起发送。 缺点:恶意用户可以更改对模板文件的引用,但可能不会造成任何损害。这种方法需要额外的模板文件,并且表示逻辑将分布在不同的文件中。
  4. 创建一个Smarty插件,自动执行第3项的过程。然后表示逻辑将不会被分离。 缺点:恶意用户可以更改对模板文件的引用,但可能不会造成任何损害。

有没有人有任何 other/better 的想法,或者有做这样的事情的经验?

我认为您不需要设置某种格式。您可以创建一个带有 3 个参数的 javascript 函数。 <select> 标签标识符,用于选项值的键名,以及用于选项文本的键名。该函数将发出 ajax 请求。这样您就可以根据特定情况调用具有所需设置的函数。

更多详细信息取决于您当前的代码。

我最终使用了选项 4,我对结果非常满意。

如果有人遇到这个问题并需要有关我如何实现它的信息,请post发表评论,我会尽力解释。