我有一个请求newtimestamp和newcomment变量的注释表单。 newtimestamp变量是单个变量,newcomment变量是从foreach循环返回的数组。
ajaxrequest.php:
foreach ($array2 as $print2) {
$var1 = $print2['var'];
$newtimestamp = $now;
$newcomment = "<div class=post>$var1</div>";
echo json_encode(array('newtimestamp' => $newtimestamp, 'newcomment' => $newcomment));
}
然后我使用ajax来添加新注释,并在隐藏的输入字段上设置newtimestamp。
AJAX:
<script>
$(document).ready(function(){
$('#commentform').on('submit',function(e) {
$.ajax({
url:'ajaxrequest.php',
data:$(this).serialize(),
type:'POST',
dataType: 'JSON',
success:function(data, response){
$("#posts").fadeOut(300);
$("#posts").prepend(data.newcomment);
$("#time").val(data.newtimestamp);
$("#posts").fadeIn(500);
$('html, body').animate({ scrollTop: $('#posts').offset().top - 100 }, 'fast');
console.log(data);
},
error:function(data){
console.log(data);
}
});
e.preventDefault();
return false;
});
});
上面的方法在控制台中给我一个成功的消息,prepend工作但每次只显示1个结果,它应该显示上一个时间戳的所有结果。如果用户发布第二个,第三个等注释,则前置和设置隐藏输入字段的值不起作用。
控制台:
Object {newtimestamp: "2014-11-19 07:59:48", newcomment: "<div>a new comment</div> 1"}
Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
我需要将newtimestamp变量作为单个变量(不是数组)返回并将其设置为隐藏的输入字段值,并且我需要将newcomment变量作为可以添加到div的数组返回。
我该怎么做?
答案 0 :(得分:0)
更改您的php文件。我不确定这是你在期待的。
ajaxrequest.php:
foreach ($array2 as $print2) {
$var1 = $print2['var'];
$newtimestamp[] = $now;
$newcomment[] = "<div class=post>$var1</div>";
}
echo json_encode(array('newtimestamp' => $newtimestamp, 'newcomment' => $newcomment));
答案 1 :(得分:0)
像这样重写你的php代码
$data = array();
foreach ($array2 as $print2) {
$var1 = $print2['var'];
$newtimestamp = $now;
$newcomment = "<div class=post>$var1</div>";
$data['data'][] = array('newtimestamp' => $newtimestamp, 'newcomment' => $newcomment);
}
echo json_encode($data);
现在JSON响应看起来像
{"data" : [{"newtimestamp" : 72345654,"newcomment" : "comment data"},{"newtimestamp" : 72345654,"newcomment" : "comment data"}]}
使用jQuery each
循环遍历对象数组。最终的代码看起来像这样。
$.each($response.data,function(index,value){
$("#posts").prepend(value.newcomment);
$("#time").val(value.newtimestamp);
})
注意:要么发送application/json
标头(以便在默认情况下解析响应并转换为js对象),要么在接收后解析它。此操作应在each
循环
答案 2 :(得分:0)
那是因为你回显了多个JSON字符串。您需要使用所有数据回显单个JSON字符串。
尝试类似下面的代码,这对我有用。您只需要将它放入您的jQuery和PHP代码中。
<?php
$jsonArray = array();
$array2 = array(array('var'=>1),array('var'=>2));
foreach ($array2 as $print2)
{
$var1 = $print2['var'];
$newtimestamp = time();
$newcomment = "<div class=post>$var1</div>";
$jsonArray[] = array('newtimestamp' => $newtimestamp, 'newcomment' => $newcomment);
}
print_r($jsonArray);
$data = json_encode($jsonArray);
?>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
var data = jQuery.parseJSON('<?=$data?>');
$.each(data, function(item, value){
console.log(value['newtimestamp']);
});
</script>