2012-05-27 23 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