Javascript JSON和AJAX的奇怪循环行为
我们有以下文件: Action.phpJavascript JSON和AJAX的奇怪循环行为,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我们有以下文件: Action.php <?php $array = array( 0 => array( 'id' => "2", 'name' => "Start", 'password' => "start" ), 1 => array( 'id' => "3", 'name' => "Med", 'password' =
<?php
$array = array(
0 => array(
'id' => "2",
'name' => "Start",
'password' => "start"
),
1 => array(
'id' => "3",
'name' => "Med",
'password' => 'med'
),
2 => array(
'id' => "4",
'name' => "Last",
'password' => 'last'
)
);
echo json_encode($array);
?>
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</head>
<body>
<div id="res-list">
<div class="response" id="1">
Name: <span class="name">Sample</span><br>
Password: <span class="password">Test</span><br>
</div>
</div>
</body>
</html>
基本上,我希望以不同的
格式输出$array
的每个元素
而且它似乎部分起作用了。但不是输出:
Name: Sample
Password: Test
Name: Start
Password: start
Name: Med
Password: med
Name: Last
Password: last
它输出
Name: Sample
Password: Test
Name: Start
Password: start
Name: Med
Password: med
Name: Start
Password: start
Name: Last
Password: last
Name: Start
Password: start
Name: Med
Password: med
Name: Start
Password: start
在我看来,当你这样做的时候:
$('.response').clone().attr('id', value.id).appendTo('#res-list');
您可以用类“response”克隆所有
元素。也许你应该给第一个单独的类(或者一个“id”值),这样你就可以专门针对它,并确保其他的没有这个类。当然,您也可以从克隆的类中删除类“response”:
$('.response').clone().attr('id', value.id).removeClass('response').appendTo('#res-list');
当您克隆“Response”时,您正在克隆包括类在内的所有内容,因此选择器“.Response”在您第一次追加后匹配2个元素。因此,第二次通过数组,您将附加2个新项目,第三次,您将附加4个项目
若要更正此问题,请在克隆的元素上调用.removeClass('response')。不应该只调用匹配元素中的第一个('response')吗?@Charlie否,它肯定意味着页面上具有类“response”的所有元素。这就是jQuery如此有用的原因:-)@charlienope;它将所有元素与该类匹配。尝试克隆
$('.response:first')
,或者沿着这些行进行克隆。或者在循环之前缓存.response
选择,然后在内部克隆它(如果需要保留response
类)。为了避免将来的问题,请注意使用数字ID不是有效的HTML4。使用'id'=>“2”
可以将分配给克隆的.repsonse的id设置为数字。
$('.response').clone().attr('id', value.id).removeClass('response').appendTo('#res-list');