Javascript变量仅在第一次起作用

时间:2016-07-06 19:54:00

标签: javascript arrays json

我有与JSON一起使用的功能。

    function makeItem(data){
    var tbl_body = "";
    $.each(data, function() {
        var id = parseInt(this.ProductId);
        var tbl_row = "";
            tbl_row += "<a href='article.php?cat=<?=$cat?>&subcat=<?=$subcat?>&id="+id+"'>";
            tbl_row += "<div class='subCatImg'><img src='imagesDB/articles/<?=$main["+id+"]['dir']?>/<?=$main["+id+"]['image']?>'></div>";
            tbl_row += "<div class='subCatName'>"+this.ProductNameBG+"</div>";
            tbl_row += "<div class='subCatText'>"+this.ProductNameBG+"</div>";
            tbl_row += "</a>";
        tbl_body += "<div class='categoryWrap'>"+tbl_row+"</div>";
    })
    return tbl_body;
}

问题是变量id仅在第一次使用时 - 在标签中但在第二次或第三次不起作用。
是因为a标签没有立即关闭,或者因为第二次和第三次我试图在php数组中使用它。我确定该数组有效,因为如果我硬核(<?=$main[1]['dir]?>)显示图像(不需要引号,我需要整数)。
问题是我必须让它变得动态,所以我不能只输入一些数字 为什么它第一次工作而不是其他工作?

2 个答案:

答案 0 :(得分:0)

@epascarello是对的。 PHP是服务器端,JS是客户端。相反,尝试做类似

的事情

<强>更新:

tbl_row += <?php print("\"<a href='article.php?cat=$cat&subcat=$subcat&id=\" + id + \"'>\""); ?>
tbl_row += <?php print("\"<div class='subCatImg'><img src='imagesDB/articles/$phpVal1/$phpVal2'></div>\""); ?>
tbl_row += <?php print("\"<div class='subCatName'>\" + this.ProductNameBG + \"</div>\"");?>
tbl_row += <?php print("\"<div class='subCatText'>\" + this.ProductNameBG + \"</div>\"");?>
tbl_row += <?php print("\"</a>\"");?>

在这里,你必须将id和dir的值从JS传递给php,这样php才能解析它的多维数组。您会注意到<?=$main["+id+"]['dir']?>/<?=$main["+id+"]['image']?>已更改为$phpVal1/$phpVal2

您可以通过多种方式完成此操作 - 也许只需点击一下按钮即可。但是php将首先完成,然后是JS。

本质上,您从服务器(php)获取所有值,并强制它为您编写客户端(JS)。

答案 1 :(得分:0)

您可以将PHP数组转换为json对象,如下所示:

var main = <?php echo json_encode($main) ?>;

然后迭代它。