在javascript中作为数组成员存储的函数/命令

时间:2014-09-16 15:47:50

标签: javascript php jquery

test.php上的PHP代码:

<?php
$con = mysqli_connect("localhost", "user", "password", "DB");
if (mysqli_connect_errno()){
    echo "failed to connect:" . mysqli_connect_error();
}

$grab = mysqli_query($con, "SELECT * FROM DB");
$cars = array();
while($row = mysqli_fetch_assoc($grab)){
    array_push($cars, array("id" => $row["Id"], "name" => $row["Name"], "color" => $row["Color"];
}
echo json_encode($cars);

然后在html页面上的jQuery / javascript代码:

var iNL1 = document.getElementById("itemNameLink1").innerHTML;
var iNL2 = document.getElementById("itemnameLink2").innerHTML;
var iNL3 = document.getElementById("itemNameLink3").innerHTML;

var iNLarr = [iNL1, iNL2, iNL3];
i = 0;

$.get("test.php", function($cars){
    $.each($cars, function(){
        iNLarr[i] = this.name;
        i++;
    });
}, "json");

任何人都可以告诉我为什么这不起作用,我在iNLarr [i]上得到空参考。我猜我不能像我已经完成的那样将命令存储在一个数组中。任何人都可以告诉我这样做的方法。

3 个答案:

答案 0 :(得分:2)

如果你想把&#34;命令&#34;在数组中,您需要将函数放入:

iNRarr = [ 
    function(html) {
        document.getElementById("itemNameLink1").innerHTML = html;
    }, function(html) {
        document.getElementById("itemNameLink2").innerHTML = html;
    }, function(html) {
        document.getElementById("itemNameLink3").innerHTML = html;
    }
];

然后你调用这样的函数:

$.get("test.php", function($cars){
    $.each($cars, function(i, car){
        if (iNLarr[i]) {
            iNLarr[i](car.name);
        }
    });
}, "json");

答案 1 :(得分:1)

如果您只返回3辆汽车和3个元素,因为您使用的是jQuery,您可以将其简化为:

var $elements=$('#itemNameLink1,itemnameLink2,itemNameLink3');

$.get("test.php", function($cars){
    $.each($cars, function(i, car){
       $elements.eq(i).html(car.name);
    });
}, "json");

eq()方法用于按索引查找集合中的元素,当输入为数组时,$.each的第一个参数是数组元素的索引

答案 2 :(得分:0)

好的,我有几件事你可能想要改变:

首先,您可能会在de array_push行上收到语法错误。您没有关闭array_push命令,请向其添加))

我认为您对javascript的定义是正确的。你无法通过object[number]获得它。尝试这样的事情:

var iNLarr = new Array();
iNLarr[0] = document.getElementById("itemNameLink1");
iNLarr[1] = document.getElementById("itemNameLink2");
iNLarr[2] = document.getElementById("itemNameLink3");

另一件事是iNLarr[i] = this.name;也不会工作。你可能意味着:

iNLarr[i].innerHTML = $(this).attr('name');

所以你的完整可能是这样的:

你的PHP:

<?php
$con = mysqli_connect("localhost", "user", "password", "DB");
if (mysqli_connect_errno()){
    echo "failed to connect:" . mysqli_connect_error();
}

$grab = mysqli_query($con, "SELECT * FROM DB");
$cars = array();
while($row = mysqli_fetch_assoc($grab)){
    array_push($cars, array("id" => $row["Id"], "name" => $row["Name"], "color" => $row["Color"]));
}
echo json_encode($cars);

?>

您的HTML / Javascript:

<div id="itemNameLink1">1</div>
<div id="itemNameLink2">2</div>
<div id="itemNameLink3">3</div>

<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>    
<script>
    var iNLarr = new Array();
    iNLarr[0] = document.getElementById("itemNameLink1");
    iNLarr[1] = document.getElementById("itemNameLink2");
    iNLarr[2] = document.getElementById("itemNameLink3");

    var i = 0;

    $.get("test.php", function($cars){

    $.each($cars, function(){
        iNLarr[i].innerHTML = $(this).attr('name');
        i++;
    });
    }, "json");

</script>