我的控制器中有一个例程,它从单个数据库列中检索值并从中构建一个带引号的数组:
$suppliers=$this->Model->find('list',array('fields'=>array('Model.supplier', 'Model.supplier')));
$strSuppliers="'".implode("','", $suppliers)."'";
$this->set('suppliers', $strSuppliers);
$ strSuppliers然后被送到jQuery脚本,该脚本在我的编辑视图的“供应商”字段中创建一个自动完成下拉列表:
<script>
$(function() {
var availableTags = [<?php echo $suppliers ?>];
$( "#MsrSupplier" ).autocomplete({
source: availableTags
});
});
</script>
变量的输出类似于“汤姆”,“迪克”,“哈利”等。
这样可以正常工作,除非任何检索到的值包含单引号。 '汤姆','迪克','哈利'打破阵列,我很难理解如何逃避单引号,以便我的下拉列表在他们出现时继续运行。我已经尝试更改分隔符并交换双引号的单引号,如下所示:
$strSuppliers='"'.implode("','", $suppliers).'"';
但那没用。我还能在这里尝试什么?
答案 0 :(得分:2)
查看json_encode()以获取PHP输出JSON字符串,然后查看JSON.parse()以便在jQuery中使用。
不使用implode()
生成字符串,而是使用json_encode()
,然后JSON.parse()
解码,以便在您需要的任何应用程序中使用。
修改:为了清晰起见,添加了一些代码:
$strSuppliers = json_encode($suppliers);
然后在你的jQuery中:
var jsonStr = '<?php echo $suppliers; ?>';
var availableTags = JSON.parse(jsonStr);
编辑2:正如ndm在评论中指出的那样,您可以通过直接将Javascript变量分配给json_encode()
的输出来更干净地执行此操作:
var availableTags = <?php echo $suppliers; ?>;