从 ajax 调用解析 JSON 数据

Parsing JSON data from ajax call

本文关键字:JSON 数据 ajax 调用      更新时间:2023-09-26

我之前发布了一些关于如何做同样事情的问题,人们为我指出了正确的方向。因此,如果这种情况重复出现,我深表歉意。但是,我这次发布是想看看是否有人可以抽出几秒钟来帮助我使用javascript。

我有一个表单,该表单已将数据提交到不同的表中,并希望实现"预制响应功能"。这只是一个下拉列表选择,当选项列表的onChange事件触发时,它会运行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;
        }
}
O,我

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

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

可以将 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。

要在 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 
}

顺便说一句
,这是一个类似的问题在这里,您可以找到可以使用jQuery.ajax方法指定的各种内容($.ajax是一回事,$jQuery是同义词)