【问题标题】:Parsing JSON data from ajax call从 ajax 调用解析 JSON 数据
【发布时间】:2012-07-06 11:01:14
【问题描述】:

我之前发布了一些关于如何做同样事情的问题,人们为我指明了正确的方向。因此,如果这变得重复,我深表歉意。不过,我这次发帖是想看看是否有人能抽出几秒钟来帮助我处理 javascript。

我有一个表单,它已经将数据提交到不同的表中,并且想要实现“预设响应功能”。这将只是一个下拉列表选择,当Option List的onChange Event Fire的命运时,它运行填充以下文本区域的JavaScript,其中包含适当的数据。

我相信它已经在一个表单中,我不能简单地将它放在另一个表单中并使用提交,而且我希望能够在不刷新页面的情况下做到这一点。`

<form action="<?=base_url();?>ticket/addmessage/<?=$ticket_details['id'];?>/" enctype="multipart/form-data" method="post" name="message">

        <label for="frm_precan">Canned Response</label>
        <span class="input">                        
            <select id="frm_precan" name="precan" onchange="updateText()">
                <option value="">--Please Select--</option>
                <?php foreach($precan_list as $precan) :?>
                    <option value="<?=$precan['id']; ?>"><?=$precan['name'];?></option>
                <?php endforeach; ?>            
            </select>
        </span>

        <ul>
            <li><label for="message">Message<span class="req">*</span></label><span class="input"></span><br/></li> 
        </ul>   
        <textarea style="width: 100%; margin: 0; padding: 0; border-width: 1; font-family: courier;" name="message" rows="10" id="text_area"></textarea>
        <button type="submit"><span>Add Message</span></button>

</form>

这是我的 HTML 表单。它通过 SQL 使用 PHP 来填充选项列表,因为预先存储的消息存储在 SQL 表中。

所以我需要做的是以某种方式链接这个 Javascript(在 onChange 上调用):

        function updateText()
       {
       var message = document.getElementById('frm_precan').value;
       $('#text_area').val(message)
       };

(非常基本,我知道,但这是我挣扎的地方)所以这段代码想要传递('frm_precan').value;(这是表中的 ID,以及我想要查询正确消息的字段)。 .. 到一个看起来像这样的 php 文件:

    public function get_message($message_id)
    {
        $sql_list  =
        "
        SELECT *
        FROM  ".$this->tables_automessages."
        WHERE id = '".mysql_real_escape_string($message_id)."'";

        $query = $this->db->query($sql_list);
        if($query->num_rows() > 0)
            {
            foreach ($query->result_array() as $row)
                {
                $return[] =
                array(
                        'message'                   =>  $row['message']

                    );
                }
            return $return;
            }
        else return false;
        }
}

哦,我正在使用代码点火器,所以这也可能是我感到困惑的一个原因。所以变量想要从 javascript 出来进入一个控制器然后去 SQL 查询。

如果有人能理解我的意思,我会感到惊讶......并且非常感激。

【问题讨论】:

  • 您遇到了什么问题? (可能是你的 PHP 中的 return 语句在 for 循环中,这看起来有点奇怪)。
  • 我遇到的问题是使用 javascript。我已经发布了一些非常基本的 javascript,因为我对 javascript 不是很有信心。我只需要帮助使它像我在各种教程中看到的那样工作......例如w3schools.com/php/php_ajax_database.asp
  • @alnorth29:return 语句不在循环内,它是它需要的地方。 @mrsorbose:不过,我在任何地方的代码中都没有看到类似 ajax 的内容。您可能想查看 jQuery 的(您似乎已经使用过)$.ajax 方法。此外,如果它是一个单独的脚本(即不是一个类),get_message 将是一个标准函数,而不是一个成员函数/方法,所以删除 public 关键字

标签: php javascript sql ajax codeigniter


【解决方案1】:

您的 updateText 函数可以更改为此以从您的控制器获取值并将生成的文本放在文本区域中。

function updateText()
{
    var messageId = $('#frm_precan').val();
    $.get('/yourcontroller/get_message/' + messageId, function(data) {
        $('#text_area').val(data)
    });
}

查看您的 get_message 函数,您应该将其更改为仅返回消息文本而不是数组,否则您需要对结果进行 json_encode 并将 jQuery .get 调用更改为 .getJSON。

【讨论】:

    【解决方案2】:

    在你的 ajax 调用中使用 post:

    function updateText()
    {
        $.ajax({
            url: '/controller/get_message',
            data: {message_id:$('#frm_precan').val()},//no need to json encode, jQ does this for you
            type: 'POST',
            dataType: 'json',//or omit, jQ does an intelligent guess
            success: function(response)
            {
                console.log(responese);
                //function will be called when the ajax call is completed
            }
        });
    }
    

    在您的控制器中,get_message 成员函数可能如下所示:

    public function get_message()
    {
        $id = $this->input->post('message_id');//=== data key used to send request
        //do your query 
    }
    

    Here 是一个类似的问题顺便说一句
    here,你可以找到各种你可以用jQuery.ajax 方法指定的东西($.ajax 是同一个东西,$ 和@987654328 @ 是同义词)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多