2012-05-27 22 views
1

我用json響應制作了一個ajax表單。 json數組包含mysql數據庫以外的信息。現在我想在一個表格中顯示這些數據。在php中使用ajax json響應數組

我在隱藏的html文件中做了一個佔位符。

這裏我對AJAX/JSON的部分代碼:

$("#select_coffee_talk_year").button().click(function() { 
    var form = $('#coffee_talk_year'); 
    var data = form.serialize(); 

    $.ajax({ 
     url: "include/scripts/select_event.php", 
     type: "POST", 
     data: data, 
     dataType: 'json', 
     success: function (select) { 
      //alert(select.ID[0]); 
      //alert(select.ID[1]); 
      //alert(select.ID.length); 


      $("#coffee_talk").fadeOut(); 
      $("#coffee_talk").fadeIn(); 
     } 
    }); 
    return false; 
}); 

這是我的html:

<p class="bold underline headline">Bereits eingetragen:</p> 
    <form id="coffee_talk_year" action="include/scripts/select_event.php" method="post" accept-charset="utf-8"> 
     <select name="year_coffee_talk" id="year_coffee_talk"> 
      <option value="none" class="bold italic">Jahr</option> 
      <?php 
       for($i=2008; $i<=$year; $i++){ 
        if ($i == $year) { 
         echo "<option value=\"".$i."\" selected=\"$i\">".$i."</option>\n"; 
        } else echo "<option value=\"".$i."\">".$i."</option>\n"; 
       } 
      ?> 
     </select> 
     &nbsp;&nbsp; 
     <button id="select_coffee_talk_year">anzeigen</button> 
     <input type="hidden" name="coffee_talk_year_submit" value="true" />​​​​​​​​​​​​​​​​​ 
    </form> 
    <br /> 
    <div id="coffee_talk"></div> 
    <br /> 
    <button id="add_coffee_talk">hinzufügen</button> 

select_event.php:

if ('POST' == $_SERVER['REQUEST_METHOD']) { 
    /*******************************/ 
    /** Erzaehlcafe auswählen 
    /*******************************/ 
    if (isset($_POST['coffee_talk_year_submit'])) { 
     $getID = array(); 
     $getDate = array(); 
     $getTheme = array(); 
     $getContributer = array(); 
     $getBegin = array(); 
     $getPlace = array(); 
     $getEntrance = array(); 
     $getFlyer = array(); 

     $sql = "SELECT 
        ID, 
        Date, 
        Theme, 
        Contributer, 
        Begin, 
        Place, 
        Entrance, 
        Flyer 
       FROM 
        Coffee_talk 
       WHERE 
        YEAR(Date) = '".mysqli_real_escape_string($db, $_POST['year_coffee_talk'])."' 
       "; 

     if (!$result = $db->query($sql)) { 
      return $db->error; 
     } 

     while ($row = $result->fetch_assoc()) { 
      $getID[$i] = $row['ID']; 
      $getDate[$i] = $row['Date']; 
      $getTheme[$i] = $row['Theme']; 
      $getContributer[$i] = $row['Contributer']; 
      $getBegin[$i] = $row['Begin']; 
      $getPlace[$i] = $row['Place']; 
      $getEntrance[$i] = $row['Entrance']; 
      $getFlyer[$i] = $row['Flyer']; 
      $i++; 
     } 

     $result->close(); 

     $response['ID'] = $getID; 
     $response['Date'] = $getDate; 
     $response['Theme'] = $getTheme; 
     $response['Contributer'] = $getContributer; 
     $response['Begin'] = $getBegin; 
     $response['Place'] = $getPlace; 
     $response['Entrance'] = $getEntrance; 
     $response['Flyer'] = $getFlyer; 

     echo json_encode($response); 
    } 
} 

事業部使用id = coffee_talk是我的佔位符。現在,我想在表中消失,其數據,如果我改變的一年,與按鈕提交它,我想淡出舊的和漸新。

我唯一的問題是,我需要寫這個在循環中的php表。但我認爲它不可能在Java Script中使用。我該怎麼辦?

PS我使用了ajax,因爲我不想重載所有的時間。

+0

什麼是不可能的JavaScript?循環?另外 - 響應AJAX的代碼在哪裏?你對你的JSON響應做了什麼?如果你要返回JSON,你將不得不建立你的桌子clientside;如果您返回HTML,則可以直接將其放入文檔中。另外,你很可能想在fadeOut上使用回調。在javascript中可以使用 – Amadan

+0

循環。不知道如何將這些東西放入div中。我應該寫一個var並將所有值放入一個大字符串中嗎?然後$('#...')。html($ string)這個? – JPM

+1

我知道循環是可能的在JS - 我只是不明白你的句子提到。你可以建立一個HTML字符串,按照你的說法做'.html';您可以一次一個顯式構建節點並構建一個文檔片段;或者您可以在PHP中構建HTML並將其作爲HTML而不是JSON傳輸,並使用'$('#...')。load('select_event.php')'。 – Amadan

回答

2

你快速的解決辦法是:

$("#select_coffee_talk_year").button().click(function() { 
    var form = $('#coffee_talk_year'); 
    var data = form.serialize(); 

    $.ajax({ 
     url: "include/scripts/select_event.php", 
     type: "POST", 
     data: data, 
     dataType: 'json', 
     success: function (select) { 
      var coffee_talk = $("#coffee_talk"); 
      coffee_talk.fadeOut('fast', function() { 
       for(i in select) { 
        row = select[i]; 
        div = coffee_talk.append('<div id="row_'+i+'" />'); 
        for(column in row) { 
         div.append('<span class="column_'+column+'">'+row[column]+'</span>'); 
        } 
       } 
       coffee_talk.fadeIn(); 
      }); 
     } 
    }); 
    return false; 
}); 

對於一個更好的方法,你應該查找Moustache.js這是具有等同於PHP/Java的/紅寶石/ Python中的客戶端的JavaScript模板引擎(/ Go和其他語言,並基於Google CTemplates)。

它將允許您創建HTML模板,並使用變量中的數據填充它們,例如AJAX請求可能會收到的JSON變量。

+0

感謝您的建議我會看看它 – JPM