在Smarty中定义AJAX返回的格式


Define in Smarty the format to be returned by AJAX

我在Smarty模板中有一个html表单。表单中的select是通过AJAX填充的。我想在Smarty模板中指定AJAX调用返回的格式。通过这种方式,我可以将相同的请求url用于不同的目的。例如,如果select包含用户,有时我可能有兴趣了解用户的电子邮件地址(格式:"{$Option->GetName()} ({$Option->Email})"),其他时候可能有兴趣知道用户的组织(格式:"{$Option->GetName()} ({$Option->Organisation})")。

我对如何实现这一点有一些想法:

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

有人对做这样的事情有其他更好的想法或经验吗?

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

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

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

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