我有一个非常简单的自动完成功能附加到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版本)是相同的。
答案 0 :(得分:2)
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