在ajax调用之后将HTML附加到特定DOM

时间:2011-03-06 15:54:02

标签: php jquery ajax

在我的php页面中,我有三个列表ul#line,ul#comment,ul#vote。

我打算进行ajax调用,比如

           $.ajax({
        type: "POST",
        url: "ajax.php",
        data: dataString,

        cache: false,
        success: function(html){
            $("ul#line").append(html);
            $("ul#lineli:last").fadeIn("slow");
    }

Ajax.php类似于

if(isset($line)){
    echo $line;
} elseif(isset($comment)){
    echo $comment;
} elseif (isset($vote)){
    echo $vote;
} else {
   //do nothing;
}

我想要的是,如果回显的HTML是$ line,它将被附加到ul#line;如果是$ comment,则会附加到ul#comment;如果是$ vote,则会附加到ul#vote。

当前的ajax调用仅附加在ul#line。

为了达到这个目的,我需要做些什么改变?

3 个答案:

答案 0 :(得分:2)

我会以JSON的身份传回信息。有类似的东西:

{updateList : nameOfList, output: $line/$output/$vote }

然后在成功时你可以做类似

的事情
$('#'+html.updateList).append(html.output);

你必须确保让jQuery知道你正在发送并接受json作为类型。

答案 1 :(得分:2)

php

class DataObject
{
    public $Type;
    public $Text;
}
    $json=new DataObject();

if(isset($line)){
    $json->Type="line";
    $json->Text=$line;
    return json_encode($json);
} elseif(isset($comment)){
    $json->Type="comment";
    $json->Text=$comment;
    return json_encode($json);
} elseif (isset($vote)){
    $json->Type="vote";
    $json->Text=$vote;
    return json_encode($json);
} else {
   //do nothing;
}

<强>的javascript

    $.ajax({
    type: "POST",
    url: "ajax.php",
    dataType: 'json',  //add data type
    data: dataString,    
    cache: false,
    success: function(data){
        $("ul#"+data.type).append(data.text);
        $("ul#"+data.type+"li:last").fadeIn("slow");
     }

答案 2 :(得分:1)

您需要某种方法来区分$line$comment的值。

我建议从PHP脚本中发回JSON:

if(isset($line)){
    echo '{"line" : ' . json_encode($line) . '}';
} elseif(isset($comment)){
    echo '{"comment" : ' . json_encode($comment) . '}';
} elseif (isset($vote)){
    echo '{"vote" : ' . json_encode($vote) . '}';
} else {
   //do nothing;
}

注意: PHP不是我最强的语言,因此可能有更好的方法来生成JSON响应

success: function(data){
           if(data.line) {
              $("ul#line").append(html);
              $("ul#lineli:last").fadeIn("slow");
           }
           else if(data.comment) {
              $("ul#comment").append(html);
              $("ul#commentli:last").fadeIn("slow");
           }
        }