处理由外部PHP脚本回显的检索数据

时间:2014-06-28 04:19:01

标签: javascript php jquery ajax

我不认为自己是专业人士。我决定今年夏天花几个网络语言,让我能够为我的想法做出原型(我是一名设计师)。

为了解决这个问题,我很难搞清楚如何操作我从外部.php脚本回复的元素。基本上我是这样做的。

process_feed.php: - 获取数据,根据数据进行SQL搜索,输出行

 while ($row = mysql_fetch_assoc($feedResult))
    {
       $ctime = date("U",strtotime($row['timestamp']));

       echo '<div id="secretmsg">'.$row['secretmsg'].'</br>';
       echo '<div id="postedby">Posted By: '.$row['postedby'].'</div>';
       echo '<div id="timestamp">'.ago($ctime).'</div><button type ="button" name="'.$row['m_id'].'">Reply</button></div>';
    }

主页:

 function RefreshFeed()
{    

    var SchoolName = document.getElementById('schoolname').innerHTML;

    $.post('../../process_feed.php', {name: SchoolName}, processResponse);

    function processResponse(data) {
    $('.secretfeed').html(data);

    }



}

也许不是最好的解决方案,但我在一段时间内有RefreshFeed,所以我可以不断获取最新信息。

问题是:我正在努力建立一个评论系统,用户可以在其中回复每个帖子。在我的进程页面上,我添加了一个Reply按钮,其名称设置为数据库中的ID。我正在尝试设置基本功能,其中“回复”按钮将打开文本输入以进行注释,根据ID等将消息发送到数据库等。但是,在我的主页面上,我无法操作元素,因为它是被回应?为了将数据库中的信息回显到我的主页面,然后从我的主页面操纵回显的div,我可以更改什么。

我希望这是有道理的 - 感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么你想在添加数据后修改DOM - 这样你就可以只使用一个选择器来获得所需的元素并做你想做的事 - 例如:

function processResponse(data) {

    // Selector to get all elements by class name within the whole document
    $('.secretfeed').html(data);

    // Selector to get all buttons by tag name inside $('.secretfeed')
    $('.secretfeed').find('button').text('foo'); 

    // Selector to get all buttons by attribute inside $('.secretfeed')
    $('.secretfeed').find('[type="button"]').text('bar');

    // Selector to get the element with the given id within the whole document
    $('#secretmsg').css('color', '#ff0000');

}

备注:

HTML元素的ID应始终在整个文档中是唯一的!在您的示例中,您可能使用相同的id回显多个元素(因为它在while循环中) - 使用{{1}而不是。

建议保存选择器,以便jQuery不需要反复解析DOM - 例如:

class=""

但请记住,当你通过例如修改DOM时,选择器不会更新。使用var $myselector = $('.myclass'); $myselector.text('foo'); 添加另一个元素 - 然后您需要再次分配变量,以便选择器包含新插入的元素。

此外,当你想要处理它时,确保DOM已经准备好了 - 关于你的回调class="myclass"这种情况总是如此,因为jQuery会处理它并且在它准备好之前不会执行回调 - 但当你从一个页面重新加载包装你的代码时这样:

processResponse

其他信息:

最后(超出你的问题范围)看一下事件委托,这样你就不需要直接选择所有元素 - 例如如果你想为你的所有按钮添加一个点击处理程序,你不需要为每个按钮注册一个事件处理程序,但可以创建一个全局按钮:

var $myselector = $();
$(document).ready(function(){
    $myselector = $('.myclass');
});