在 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})"
)。
关于如何实现这一点,我有一些想法:
- 将格式存储在模板中的html/js中。然后 AJAX-调用可以连同请求一起发送所需的 return-格式。 缺点:恶意用户可以更改请求中的格式,这可能是一个安全问题。
- 传递整个
$Option
对象,并使用 JavaScript 进行格式化。 缺点:不能使用PHP对象的方法,例如$Option->GetName()
.
- 将格式存储在单独的模板文件中,并在 html/js 中引用此文件并与 AJAX 请求一起发送。 缺点:恶意用户可以更改对模板文件的引用,但可能不会造成任何损害。这种方法需要额外的模板文件,并且表示逻辑将分布在不同的文件中。
- 创建一个Smarty插件,自动执行第3项的过程。然后表示逻辑将不会被分离。 缺点:恶意用户可以更改对模板文件的引用,但可能不会造成任何损害。
有没有人有任何 other/better 的想法,或者有做这样的事情的经验?
我认为您不需要设置某种格式。您可以创建一个带有 3 个参数的 javascript 函数。 <select>
标签标识符,用于选项值的键名,以及用于选项文本的键名。该函数将发出 ajax 请求。这样您就可以根据特定情况调用具有所需设置的函数。
更多详细信息取决于您当前的代码。
我最终使用了选项 4,我对结果非常满意。
如果有人遇到这个问题并需要有关我如何实现它的信息,请post发表评论,我会尽力解释。
我在 Smarty 模板中有一个 html 表单。表单中的 select
通过 AJAX 填充。我想在 Smarty 模板中指定由 AJAX 调用 return 编辑的格式。这样我就可以为不同的目的使用相同的请求-url。例如,如果 select
包含用户,有时我可能想知道用户的电子邮件地址(格式:"{$Option->GetName()} ({$Option->Email})"
),有时我可能想知道用户的组织(格式:"{$Option->GetName()} ({$Option->Organisation})"
)。
关于如何实现这一点,我有一些想法:
- 将格式存储在模板中的html/js中。然后 AJAX-调用可以连同请求一起发送所需的 return-格式。 缺点:恶意用户可以更改请求中的格式,这可能是一个安全问题。
- 传递整个
$Option
对象,并使用 JavaScript 进行格式化。 缺点:不能使用PHP对象的方法,例如$Option->GetName()
. - 将格式存储在单独的模板文件中,并在 html/js 中引用此文件并与 AJAX 请求一起发送。 缺点:恶意用户可以更改对模板文件的引用,但可能不会造成任何损害。这种方法需要额外的模板文件,并且表示逻辑将分布在不同的文件中。
- 创建一个Smarty插件,自动执行第3项的过程。然后表示逻辑将不会被分离。 缺点:恶意用户可以更改对模板文件的引用,但可能不会造成任何损害。
有没有人有任何 other/better 的想法,或者有做这样的事情的经验?
我认为您不需要设置某种格式。您可以创建一个带有 3 个参数的 javascript 函数。 <select>
标签标识符,用于选项值的键名,以及用于选项文本的键名。该函数将发出 ajax 请求。这样您就可以根据特定情况调用具有所需设置的函数。
更多详细信息取决于您当前的代码。
我最终使用了选项 4,我对结果非常满意。
如果有人遇到这个问题并需要有关我如何实现它的信息,请post发表评论,我会尽力解释。