0

使用 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,匹配selectedIDjson 中的内容?

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

我希望保存内部 json,然后在我选择它时emailmsg_html将其加载到选择输入中。textareaemailmsgid

(我基本上正在努力消除我的代码需要调用服务器的任何时间,似乎这是最好的路线)

4

2 回答 2

1

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

您可以将对象、数组等传递给它,它会为您转换它们。

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

于 2013-01-11T19:26:32.200 回答
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>

然后你的脚本会变成: $(document).ready(function(){

  // 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>
于 2013-01-11T19:30:40.710 回答