PHP - 从Select Options创建/调用JSON

时间:2013-01-11 19:01:30

标签: php mysql json

使用javascript和JSON来解决问题。 我想在JSON数组中存储一些html值,所以我可以在需要时调用它们(通常来自某些jquery事件监听器)

这会不断使用$ .ajax进行客户端到服务器的调用。

所以,我有一个<select>,其中包含数据库填充选项:

<select name="emailmsgid" id="emailmsgid">
<option value="0">------select a template-------</option>
<?php 
 $q = mysql_query("SELECT emailmsgid,emailmsgsubject,emailmsg_html FROM tbl_email_templates");
 while ($r = mysql_fetch_array($q)){
   $emailmsgid = $r['emailmsgid']; // int
   $emailmsgsubject= $r['emailmsgsubject']; // short desc
   $emailmsg_html = $r['emailmsg_html']; // usually html with images (save to json, somehow)
?>
   <option value="<?=$emailmsgid;?>"><?=$emailmsgsubject;?></option>
 <? } ?>
</select>
<br>
<textarea name="selectedmsg" id="selectedmsg"></textarea>

<script language="javascript" type="text/javascript">
$(document).ready(function(){

  // populate the textarea above
  $("#emailmsgid").change(function(){
    var selectedID = $(this).val();
     /* how to look into json here with selectedID */ 

    $("#selectedmsg").val("whatever the json has saved for that emailmsgid");
  }); 

});
</script>

这是上面缺少的。
- 创建json字符串,(从php / mysql while语句中),这样下面的jquery可以引用json,将selectedID与json中的内容匹配?

我承认我是JSON的新手,这对我来说是学习如何使用它的好方法,也是从jquery调用名称/值对的好方法。

我希望将emailmsg_html保存在json中,然后当我在select输入中选择匹配textarea时将其加载到emailmsgid

(我基本上都在努力消除我的代码需要调用服务器的任何时候,看起来这是最好的路线)

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用json_encode()http://php.net/manual/en/function.json-encode.php

你可以传递它的对象,数组等,它会为你转换它们。

额外评论 你的代码非常混乱。在HTML中间有MySQL请求并不是很好。您可能希望对MVC框架进行一些研究。

答案 1 :(得分:0)

为了防止各种编码和传输问题,我要做的是将html放在以后可以访问的隐藏容器中:

<div style="display:none">
<?php while ($r = mysql_fetch_array($q)){ ?>
    <div id="container_<?php echo $r['emailmsgid']; ?>">
        <div class="description">
            <?php echo $r['emailmsgsubject']; // short desc ?>
        </div>
        <div class="html">
            <?php echo $r['emailmsg_html']; // usually html with images (save to json, somehow) ?>
        </div>
<?php } ?>
</div>

然后你的脚本将成为:          $(文件)。就绪(函数(){

  // populate the textarea above
  $("#emailmsgid").change(function(){
    var selectedID = $(this).val();

    var msgHtml = $('#container_' + selectedID).find('.html').html();  // This line is how you get the html

    $("#selectedmsg").val("whatever the json has saved for that emailmsgid");
  }); 

});
</script>