1

同じことを行う方法について以前にいくつかの質問を投稿しましたが、人々は私を正しい方向に向けました。これが繰り返されている場合は、申し訳ありません。ただし、今回は、誰かが 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 テーブルに格納されているため、SQL 経由で PHP を使用してオプション リストを設定します。

だから私がする必要があるのは、何らかの方法でこの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 クエリに移動する必要があります。

誰かが私の言いたいことを理解できたら、私は驚きます...そしてとても感謝しています。

4

2 に答える 2

2

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 に変更する必要があります。

于 2012-07-06T11:10:31.553 に答える
1

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、同義語です)

于 2012-07-06T11:22:24.140 に答える