混合使用php和javascript——我们应该在这里使用json吗?

混合使用php和javascript——我们应该在这里使用json吗?,php,javascript,json,yii,Php,Javascript,Json,Yii,考虑到以下代码被截断: if('<?= Yii::app()->controller->action->id?>' == 'create'){ $("#Event_name").focusout(function(){ $.ajax({ success: function(html) { type: 'get', url: '<?php echo $this->createUrl('related'); ?>

考虑到以下代码被截断:

if('<?= Yii::app()->controller->action->id?>' == 'create'){
 $("#Event_name").focusout(function(){
  $.ajax({
    success: function(html)
    {
     type: 'get',
     url: '<?php echo $this->createUrl('related'); ?>'
if(“”==“创建”){
$(“#事件名称”).focusout(函数(){
$.ajax({
成功:函数(html)
{
键入:“get”,
url:“”
这很有效,但是。。。 这是一种正确的方法吗?我更喜欢一边是php,另一边是javascript,这有意义吗


能有人给我举个例子,当正确的时候,这个东西会是什么样子?

< P>是的,你应该使用JSON。这样你就不用担心字符串中间的引号或代码> <代码>。< /P>
if(<?= json_encode(Yii::app()->controller->action->id) ?> == 'create'){
   ...
     url: <?php echo json_encode($this->createUrl('related')); ?>
如果(='create'){
...
网址:

我对您使用的框架不太熟悉,但如果您将变量从控制器传递到视图,则效果会更好:

控制器:

...
$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(“”==“创建”){
$(“#事件名称”).focusout(函数(){
$.ajax({
成功:函数(html)
{
键入:“get”,
url:“”

就个人而言,我建议将该条件移动到控制器中。它非常简单,可以由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的好方法。

因此,JavaScript中包含PHP标记这一事实不是我们应该避免的,也不是什么。这是自然的?是可以接受的。只要确保使用JSON,就可以发出JavaScript文本。“最好是将变量从控制器传递到视图”-我能问一下原因吗?我确实在这里和那里读了很多,但我不确定这是一种最佳实践(我接受任何带有go read it文本的链接)。)这可能是最接近您所寻找的。即使您使用JSON,您仍然需要PHP在您的js代码中设置变量。例如,var params=,然后在您的js中,您可以执行以下操作:如果(params.action_id=='create')…@MEM-变量被传递到您的视图中,以便将控制器与视图(尽可能)明确分开,您可以看到,如果在视图中执行此操作,您只需知道显示的内容,而不必担心其值背后的逻辑(因为它在控制器中),除此之外,它是可读的
$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);