可以使用getJSON从页面已经呈现的html标记id中获取值吗? json_decode?

时间:2011-09-29 11:47:16

标签: php javascript html json

我的意思是,在呈现html页面之后,如何通过使用html标签id获取值?

ex:在我的JS函数中使用td_date获取date的值? 在将数据放在页面上的代码下方:listSuccess.php

foreach ($pager->getResults() as $msg)
{ 
    echo "<tr id='td_id' value='$msgId'</tr>";
    $date = add_date($msg->getCreatedAt(),$hr=2);
echo "<td class='td_show_contact_item' align='left' id='td_date'>".$date."</td>";
    <td align='left' id='td_subject'>
     <a href="<?php echo url_for('messagebox/read?cursor=').$cursor ?>" style='color:#ff0000 !important' class='spn_small_red_rbc'><?php echo $msg->getSubject();?></a>
   </td>
   echo "<td class='td_show_contact_item' align='left' id='td_from'>".$unique_code_from."</td>";
   echo "<td id='block_url'>( ".$block_url." )</td>";
   echo "</tr>";
   ++$cursor; 

}

所以我的JS:

function ax_get_new_msg_details()
{
var mTimer; 
$.getJSON('/apps_dev.php/messagebox/newMessageDetails', function(data) 
{
    var messageExists = $('#' + data.td_id).length > 0;
    if (!messageExists)
    {
        mTimer = setTimeout('ax_get_new_msg_details()',30000);
        var str='<tr id="' + data.td_id + '">';
        str += "<td class='td_show_contact_item' align='left' id='td_date'>"+data.td_date+'</td>';
        str += "<td align='left' id='td_subject'><a href='#' style='color:#ff0000 !important' class='spn_small_red_rbc'>"+data.td_subject+"</a></td>";
        str += "<td class='td_show_contact_item' align='left' id='td_from'>"+data.td_from +"</td>";
        //str += "<td id='block_url'>"+data.block_url+"</td>";
        str +='<tr>';
        var tbl = $('#td_date').parents('table');
        $(tbl).append(str);
        }
    });
}

然后是我的actions.class.php中的newMessageDetails.php

public function executeNewMessageDetails(sfWebRequest $request)
{  
    $profile_id = $this->getUser()->getAttribute('profile_id','zero');  
    $new_msgs = RcMessageBoxTablePeer::getNewMessages($profile_id);
    if (count($new_msgs) >= 1)
    {
        foreach ($new_msgs as $row)
        {
           $date = $row->getCreatedAt();
           $subject = $row->getSubject();
           $from = $row->getProfileIdFrom();
           $id = $row->getId();
           $uc_record = RcProfileTablePeer::getById($from);
           $uc_from = $uc_record->getUniqueCode();
           //$block_url = 'Block User',"blocklist/block?unqiue_code=$uc_from",'class=link_medium_blue');
        }
        $output = array("td_date" => $date, "td_subject" => $subject, "td_from" => $uc_from, "td_id" => $id);
    }
    else
       $output = "";

    return $this->renderText(json_encode($output));
}

我从JS函数获得的数据是正确的,但我需要以某种方式知道我的页面上实际已经存在的内容,即渲染的内容已经与json返回的内容不同,如果数据不同,请更新页面新的json数据

任何建议?

2 个答案:

答案 0 :(得分:0)

我个人使用firefox和Web开发人员工具栏,它不仅允许您查看源代码,还允许您查看生成的源代码,以及许多其他非常有用的工具,希望这对您有所帮助。

答案 1 :(得分:0)

为什么不在tr标签中包含你的td_id,只是将传入的id与现有的id进行比较?

var str='<tr id="' + data.td_id + '">';

然后在您的更新中将此if条件放在您的代码周围:

var messageExists = $('#' + data.td_id).length > 0;
if (!messageExists) {
// your existing code
}