можно ли использовать getJSON для получения значения из идентификатора html-тега, уже отображаемого страницей?? json_decode?

#php #javascript #html #json

#php #javascript #HTML #json

Вопрос:

я имею в виду, что после отображения html-страницы, как я могу получить значение, используя идентификатор html-тега??

пример: получить значение date с помощью td_date в моей функции JS?? ниже приведен код, который помещает данные на страницу: 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);
        }
    });
}
  

затем newMessageDetails.php в моем actions.class.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

любой совет?

Ответ №1:

Почему бы не включить ваш td_id в тег tr и просто сравнить входящий идентификатор с существующим идентификатором?

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

Затем в вашем обновлении поместите это условие if вокруг вашего кода:

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

Комментарии:

1. Посмотрите лучше. Я отредактировал его дальше, чтобы начальный tr, сгенерированный вашим кодом пейджера, также имел td_id

2. Привет, по-видимому, моя правка не появится, пока она не будет проверена экспертами, поэтому, подводя итог, я обновил первый tr в вашем первом блоке кода, чтобы иметь id='{$ msg-> getId()}’. Я не знаю, как структурирован ваш объект $ msg, но в основном вам нужно убедиться, что атрибут id вашего TR имеет идентификатор сообщения, чтобы, когда javascript проверяет его в логике messageExists, он работал.

Ответ №2:

Лично я использую firefox и панель инструментов веб-разработчика, она не только позволяет вам видеть исходный код, но и позволяет просматривать сгенерированный исходный код, а также множество других очень полезных инструментов, надеюсь, это поможет вам.

Комментарии:

1. включите firebug для chrome, чтобы видеть все, что происходит 🙂 я просто как-то к моменту запуска моего json.. знайте, что уже было отображено, чтобы я мог сверить его с тем, что вернул json 🙂