你知道,我真的把jquery和codeigniter搞混了。我创建了一个web应用程序来监视来自用户的请求表单。我有一个视图的html,显示一个表,像这样:
+---------------+--------------------+
| id_request | comment_bapak |
+---------------+--------------------+
| 001 | |
| 002 | |
| 003 | |
+---------------+--------------------+
我想在jquery或javascript中创建一些警报时,列'comment_bapak'被用户插入。所以,我在jquery上使用自动刷新页面。假设,一个用户插入"这是id_request 002的评论",然后,在web上将显示alert("Request 002 has inserted")
,表将像这样刷新。
+---------------+---------------------------------+
| id_request | comment_bapak |
+---------------+---------------------------------+
| 001 | |
| 002 |This is comment of id_request 002|
| 003 | |
+---------------+---------------------------------+
这是我的代码
public function getKomentarMD() {
$this->db->select('id_request, comment_bapak');
$query = $this->db->get('tbl_requestfix');
return $query->result_array();
}
控制器public function getKomentarMD() {
$row = $this->model_request->getKomentarMD();
echo json_encode($row);
}
<<p> 视图/strong> <td class="sorting1" id='no_request' data-id-reseh="<?php echo $data['id_request']; ?>"><?php echo $data['id_request']; ?></td>
<td class="center" id="tanggap_md"><?php echo $data['jawaban_bapak']; ?> /td>
Jquery function refreshAkibatCommentMD() {
var temp[];
var requestMasuk = $('#tanggap_md').text();
var audioElement = document.getElementById('notif-md');
audioElement.addEventListener('ended', function() {
this.currentTime = 0;
this.play();
}, false);
setTimeout(function() {
$.ajax({
url: '<?php echo base_url() . 'control_closing/getKomentarMD/' ?>',
type: 'POST',
dataType: 'json',
success: function(obj) {
audioElement.play(); //playing tone
alert(obj.comment_bapak);// debugging
?? Please help...
refreshAkibatCommentMD();
}
});
}, 5000);
}
我有两个问题。
- 为什么alert(obj.comment_bapak)给我undefined ?
- 我想,我应该在jquery上创建一个新的数组作为临时的,以区分新的数组从自动刷新?
任何帮助和建议,我都很感激。
-----------------------------------------------------------
我有两个页面,第一个是用户表单,第二个是监控页面。两个页面都有相同的表显示。我的意思是,当用户更新表上的一行时,会在行已更新的监视页面上有一个警报通知。所以我使用Jquery/Js来处理这个
我有一个这样的想法。
当第一次加载监控页面时,从数据库中调用所有
id, comment_bapak
并保存为第一个数组对象在JS/Jquery上自动刷新,使用ajax从数据库中调用所有
id, comment_bapak
并保存为第二个数组对象。假设用户更新了某一行,就会和第一个数组对象有所不同。检查对象上的所有项目。
查找两个数组之间的差异,当它找到时,它必须是一个警报通知?如果成功,将第一个数组对象的值更改为第二个数组对象。
你知道吗?
关于您的第一个问题:console.log(obj)
的输出表明您获得了一个对象数组。我没有看到任何关于从数据库中选择特定行的提及,ajax-response包含所有行,而不仅仅是已更改的行。所以我怀疑你的方法是只接收所有的评论。
你可以保留一个带有'current'注释的额外数组(这是你对第二个问题的意思吗?),并将其与json对象进行比较。
在页面中,也创建一个对象(" associatedarray& quot;)在javascript:
var current_comments = {
1: null,
2: null.
3: null
);
包含数据库中的所有id和注释。
然后,在ajax success-function中,执行如下操作:
success: function(obj) {
var id, comment;
audioElement.play(); //playing tone
foreach (item in obj) {
id = parseInt(item['id_request'], 10);
comment = item['comment_bapak'];
if (current_comments[id] !== comment) {
// the comment changed!
alert(comment);// debugging
refreshAkibatCommentMD();
}
}
}
<标题> 更新
(更新你的问题)
遵循你的想法:
1:是的。这就是我建议的current_comments
对象。好的起点。
2和3:当然可以将ajax结果存储在单独的对象中,但这也是您从ajax调用中获得的结果。因此,只遍历从ajax调用获得的对象更容易(并且使用更少的资源)。对于列表中的每个项目,检查它是否等于"旧的";的情况。如果没有:alert.
4:是的,你当然需要将新结果存储到第一个对象(current_comments
)中。
refreshAkibatCommentMD()
函数是做什么的,但是如果你为它提供id
和comment
(在循环中),那么这个函数可以更新current_comments
对象。标题>
success: function(obj) {
var id, comment;
audioElement.play(); //playing tone
foreach (item in obj) {
id = parseInt(item['id_request'], 10);
comment = item['comment_bapak'];
if (current_comments[id] !== comment) {
// the comment changed!
alert(comment);// debugging
refreshAkibatCommentMD(id, comment);
}
}
}
function refreshAkibatCommentMD(id, comment) {
// some logic to update the comment for row with id
}
小提示:你可能需要读一点关于javascript中数组和对象之间的区别。数组不能是"关联的";在这种情况下,它将永远是一个对象!