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


Functions/commands stored as array members in javascript

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]上得到了空引用。我猜我不能像以前那样将命令存储在数组中。有人能告诉我做这件事的方法吗。

如果您想将"命令"放入数组,您需要将函数放入:

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");

如果您只返回了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的第一个自变量是数组元素的索引

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

首先,您可能会在dearray_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>