2011-03-06 39 views
0

在我的php頁面中,我有三個列表ul#line,ul#comment,ul#vote。在Ajax調用後將HTML添加到特定的DOM

我打算做一個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爲$線,它會被追加到ul#行;如果它是$ comment,它會被追加到ul#comment;如果它是$投票,它將被追加到ul#投票。

當前ajax調用僅附加在ul#行。

我需要改變以達到這個目標?

回答

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的,因爲你沒有使用`json_encode()'按自己的價值觀

$.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"); 
    } 
+1

您的JSON可能是無效的。而你的JSON肯定是無效的,因爲你使用的是單引號(''')而不是double(''') - 請注意,雖然這是有效的JavaScript,但JSON是JavaScript的嚴格子集,並且要求鍵和值 – 2011-03-06 16:03:41

+0

json_ecnode是在對象上完成的,只是用'\'代替' – 2011-03-06 16:13:24

+0

我不同意 - 如果上面的'$ line'的內容是''這是一個帶有:\ n的字符串,需要轉義JSON「''?在有效的JSON中不允許使用'\ n'和'''。在這個字符串上使用'json_encode()'會給你''這是一個字符串:\\ n \「字符,需要轉義爲JSON \」 「(注意字符串被自動包裝在雙引號中,並且冒犯了字符轉義),現在可以安全地使用它,例如,在jQuery get()的回調函數中使用。 – 2011-03-06 16:37:04

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"); 
      } 
     } 
2

我會將信息作爲JSON傳回。碰到這樣的:

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

然後上的成功,你可以做類似

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

你必須確保讓jQuery的知道你發送和接受JSON作爲類型雖然回來了。

相關問題