混合php和javascript - 我们应该在这里使用json吗?
通过考虑下面的代码剪断:混合php和javascript - 我们应该在这里使用json吗?
if('<?= Yii::app()->controller->action->id?>' == 'create'){
$("#Event_name").focusout(function(){
$.ajax({
success: function(html)
{
type: 'get',
url: '<?php echo $this->createUrl('related'); ?>'
这工作。但... 这是一个正确的方法吗?我宁愿在一边使用php,而在另一边使用JavaScript,这是否合理?
有人可以请我提供一个例子,说明如何做到这一点看起来像正确完成?
我并不适合您使用的是框架经历,但它是更好,如果你通过来自控制器的变量视图:
控制器:
...
$action_id = Yii::app()->controller->action->id;
$created_url = $this->createUrl('related'); //$this might not be in context here
$this->render('your_view_name', array('action_id'=>$action_id, 'created_url'=>$created_url));
...
查看:
if('<?= $action_id ?>' == 'create'){
$("#Event_name").focusout(function(){
$.ajax({
success: function(html)
{
type: 'get',
url: '<?= $created_url ?>'
是的,你应该使用JSON。这样,您不必担心引号或字符串中间的</script>
。
if(<?= json_encode(Yii::app()->controller->action->id) ?> == 'create'){
...
url: <?php echo json_encode($this->createUrl('related')); ?>
因此,我们在javascript中使用php标签的事实并不是我们应该避免的事情。这很自然吗? – MEM
这是可以接受的。只要确保您使用JSON,以便发出JavaScript文字。 –
就我个人而言,我会建议将该条件移入您的控制器。它非常简单,可以通过PHP处理,无需在模板中检查该公式。
我不是很熟悉的Yii,但如下可能被改写:
$action_id = Yii::app()->controller->action->id;
$params = array();
if ($action_id == 'action') {
$created_url = $this->createUrl('related'); //$this might not be in context here
$params['handler'] = $this->render('yourhandler.tpl.php', array('created_url'=>$created_url));
}
$this->render('your_view_name', $params);
CJavaScript::encode()
是你的男人,这是传递变量和数组,甚至逃避字符串从PHP到一个伟大的方法JavaScript的。
这仍然是js和php的混合体,并且与原始版本略有不同.. – madfriend
“将控制器的变量传递给您的视图会更好” - 请问为什么?我已经阅读了很多,确实,在这里和那里,但我不知道为什么这是最佳做法。 (我接受任何链接去阅读它的文本;)) – MEM
这可能是最接近你正在寻找。即使你使用JSON,你仍然需要PHP来设置你的js代码中的变量。防爆。 var params = $ action_id,'created_url'=> $ created_url))?>,那么在你的js中,你可以这样做:if(params.action_id =='create') ... –