2016-12-01 81 views
0

我试图根据用户输入的变量firstname将数组输出到表中。如果两个数组具有相同的值,则该表应显示两个数组。目前,表中只显示第一个数组。我已经包含下面我当前的代码:

$(document).ready(function() { 
    var url = "data.php"; 

    $('#getJSON').click(function(event) { 
     event.preventDefault(); 
     var firstname = $('#firstname').val(); 
     url = url + "?firstname=" + firstname; 

     $.getJSON(url, function(json) { 
      var tr; 
      for (var i = 0; i < json.data.length; i++) { 
       tr = $("<tr/>"); 
       tr.append("<td>" + json.data[0].id + "</td>"); 
       tr.append("<td>" + json.data[0].title + "</td>"); 
       tr.append("<td>" + json.data[0].firstname + "</td>"); 
       $('table').append(tr); 
      } 
     }); 
    }); 
}); 

PHP脚本:

if ($firstname === "Emma") 
    $arr[] = array('id'=> "1", 'title'=> "Miss", 'firstname'=> "Emma", 'surname'=>"Brown"); 
else if ($firstname === "Emma") 
     $arr[] = array('id'=> "2", 'title'=> "Mrs", 'firstname'=> "Emma", 'surname'=>"Green"); 
else 
     $arr[] = array('id'=> "Unknown", 'title'=> "Unknown", 'firstname'=> "Unknown", 'surname'=> "Unknown"); 

echo '{"firstname":'.json_encode($arr).'}'; 

我会把它想输出像这样:
enter image description here

任何帮助,非常感谢!

+0

你每次循环的覆盖''tr' TR = $( “”);作为'tr'被在每次迭代 – atoms

+2

@atoms多数民众赞成罚款您正在检索的JSON以及您期望的输出的示例。我不明白'如果名字匹配它应该显示两个数组',你的意思是什么。您也可能想将'[0]'更改为'[i]' –

+2

@Emma的末尾追加你可以给我们一个' –

回答

2

你有两个错误:

第一种是使用if子句的。由于您使用的是if elseif,因此您不能在ifelseif中都输入相同的条件。else if表示如果先前的条件为假,则检查另一个条件。在这种情况下,由于第一个条件为真,elseif将永远不会执行。

第二,您总是将数据存储在结果数组的相同索引中,以便覆盖数据并始终获取此数组中的一个元素。

$id=1; 
$arr=array(); 

if ($firstname === "Emma"){ 
    $arr[] = array('id'=> $id++, 'title'=> "Miss", 'firstname'=> "Emma", 'surname'=>"Brown"); 
    $arr[] = array('id'=> $id++, 'title'=> "Mrs", 'firstname'=> "Emma", 'surname'=>"Green"); 
} 

else if($firstname === "NotEmma") 
    $arr[] = array('id'=> $id++, 'title'=> "Miss", 'firstname'=> "NotEmma", 'surname'=>"xx"); 

else 
     $arr[] = array('id'=> "Unknown", 'title'=> "Unknown", 'firstname'=> "Unknown", 'surname'=> "Unknown"); 

echo '{"firstname":'.json_encode($arr).'}'; 
+0

谢谢阿曼尼! PHP并不是我的强项,但这是完美的。 :) – Emma

+0

欢迎您,这并不复杂,您只需了解您先尝试执行的逻辑,然后将其转化为代码即可。 –

0

你可以试试这个:

var tr; 
for (var i = 0; i < json.data.length; i++) { 
    tr += "<tr>"; 
    tr += "<td>" + json.data[i].id += "</td>"; 
    tr += "<td>" + json.data[i].title += "</td>"; 
    tr += "<td>" + json.data[i].firstname += "</td>"; 
    tr += "</tr>"; 

} 

$('table').html(tr); 
+0

虽然这可能表现更好,但它在逻辑上与OP现在的情况相同,那么这将如何带来任何好处?不是我的downvote,FYI –

+0

适用于我,只有其他原因我能想到的是一个破碎的回应。所以如果这不起作用,OP应该检查他的回应。 –

+0

为什么OP要“试试这个”?一个好的答案***将总是解释所做的事情以及为什么这样做,不仅是为了OP,还是为了将来访问SO。 –

相关问题