1

我有一组来自数据库的项目。

`$this->ingredientsHistory` is the variable that contains the array.

我想把它转换成一个 javascript var 来保存它们,然后我可以在自动完成 jquery UI 函数中使用它们。

我试过了var ingredients = <?php echo json_encode($this->ingredientsHistory); ?>

这是一个print_r($this->ingredientsHistory);输出示例...

数组 ( [0] => 数组 ( [name] => 橙子 ) [1] => 数组 ( [name] => 鸡 ) )

任何帮助,将不胜感激。

编辑 - 更多信息:

$(function() {
var ingredients = <?php echo json_encode($this->ingredientsHistory); ?>;
console.log(ingredients);
//this is the default tags that jquery gives me - i need to turn ingredients into something similar.
var availableTags = [
  "ActionScript",
  "AppleScript",
  "Asp",
  "BASIC",
  "C",
  "C++",
  "Clojure",
  "COBOL",
  "ColdFusion",
  "Erlang",
  "Fortran",
  "Groovy",
  "Haskell",
  "Java",
  "JavaScript",
  "Lisp",
  "Perl",
  "PHP",
  "Python",
  "Ruby",
  "Scala",
  "Scheme"
];
$( "#tags" ).autocomplete({
  source: ingredients
});

});

4

3 回答 3

2

您的问题是您必须从 php 数组中提取每个名称属性。

使用这样的东西

<?php

$ingredientsArray = array(
    array('name' => "Lettuce"),
    array('name' => "Butter"),
    array('name' => "Chocolate"),
    array('name' => "Cheese"),
); // This is your original data structure

$resultArray = array(); // Let's treat it to get a plain array of ingredient names
foreach ($ingredientsArray as $ingredient)
    $resultArray[] = $ingredient['name'];

// And finally, output it
echo json_encode($resultArray);

如果你真的想在 JS 中得到它(虽然我不推荐它,以防你的$ingredientsArray变量中有敏感数据

$(function() {
    // Your PHP-to-JSON stuff
    var ingredientsArray = <?php echo json_encode($ingredientsArray); ?>;

    var ingredientNames = []; // There are faster ways such as reduce, but it's the most browser-compatible way to do this.
    for (int i = 0, l = ingredientsArray.length; i < l; ++i)
        ingredientNames.push(ingredientsArray[i]['name']);

    // Then assign it to your autocomplete plugin
    $('#tags').autocomplete({ source: ingredientNames });
});

请注意,hasOwnProperty尚未使用,因为我们已经知道数组的数据格式。

于 2013-04-21T16:38:35.170 回答
1
echo json_encode($this->ingredientsHistory);

使用 JSON 作为与客户端通信的一种方式。简单、快速、广泛支持等。再简单不过了。在客户端(JavaScript)中,您必须JSON.stringify处理JSON.parse这个问题。

本机支持在传统模式下不可靠且不保证,但您可以使用官方 JSON实现来保证对 JSON 的跨浏览器支持。如果您使用 jQuery,正如您所指出的,您不会有问题,只需使用 jQuery 方法。

此外,在 PHP5 中,您可以使用

var ingredients = "<?= $this->ingredients; ?>";

如果内联处理失败,您总是可以简单地使用 Ajax。

$.ajax({
    url: "blabla",
    data: "blabla",
    type: "POST",
    dataType: "json",
    success: function(serverResponse) {
        console.log(serverResponse);
    }
});

echo json_encode(whatever)在 Ajax 目标 url 上。

于 2013-04-21T15:54:40.313 回答
0

您可以进行 PHP 迭代以将元素推入 Array。

<script>
var jsArray = new Array();
<?php
   for ($this->ingredientsHistory as $value) 
?>
jsArray.push(<?=$value?>);
<?php
   } 
?>
</script>
于 2013-04-21T15:54:10.103 回答