我在CakePHP表单上的字段之一上附加了一个非常简单的自动完成功能。这是jQuery:

<script>
$(function() {
   var availableTags = [<?=$suppliers?>];
   $( "#MsrSupplier" ).autocomplete({
   source: availableTags
  });
});
</script>


这是我控制器中的代码,用于从数据库中提取下拉值。

//Dropdown suggestions for autocompleting the Suppliers field
$suppliers=$this->Msr->find('list',array('fields'=>'Msr.supplier'));
$strSuppliers='"'.implode('","',$suppliers).'"';
$this->set('suppliers',$strSuppliers);


我的edit.ctp中的域代码:

<?php echo $this->Form->input('supplier', array('type'=>'textbox', 'div'=>false,
          'name'=>'supplier', 'id'=>'MsrSupplier')); ?>


在我的开发环境(这只是在Mac OS X上运行的XAMPP的本地安装)中,这可以很好地工作。当我开始在该字段中键入单词时,会得到自动完成建议,并带有CSS格式。但是,当我将其推送到生产服务器时,在检查该字段时出现以下错误:

Uncaught SyntaxError: Unexpected token <


错误指向我的jQuery代码中的这一行:

var availableTags = [<?=$suppliers?>];


因此,我看到了问题,但我不知道为什么会出现问题或如何解决。 XAMPP中的Apache版本是2.4.16。我的服务器上的版本是在CentOS 5上运行的2.2.3-92。这两个环境都在运行CakePHP 2.0.5,并且指向我的jQuery版本的默认布局是相同的。

最佳答案

echo还具有一种快捷语法,您可以在其中立即在开始标记后加上等号。在PHP 5.4.0之前,此简短语法仅在启用short_open_tag配置设置的情况下起作用。


http://php.net/manual/en/function.echo.php

您的服务器可能已禁用该选项,因此它按原样输出,即<?=$suppliers?>,而不是解释为PHP。

ps。通常,当将数据从PHP传递到JS时,我会使用json_encode,即,不要在控制器中建立逗号分隔,带引号的字符串,而是将查询/结果按原样传递给视图,然后执行以下操作:

var availableTags = <?php echo json_encode($suppliers) ?>; // or <?= when applicable

07-24 09:44
查看更多