0

「こんにちは??」と入力すると テキスト領域 (id = add_new_comment) に、hellojQuery1704879437133033947_1333718592556??を挿入します。データベースで。コードの問題は何ですか?前もって感謝します

    $('#add_new_comment').live('keyup',function (event) {

            /*shft+enter for new line*/

        if (event.keyCode == 13 && event.shiftKey) {
           $(this).val($(this).val()+"\n");

           return false;   
        }else if(event.keyCode == 13){
            /*code to be inserted in db*/
        }
    });

データベースコード (つまり、codeigniter のモデル)

function add_new_comment($comment, $store_id, $comment_source,$user_id) {
        $data = array(
            'comment' => $comment // comment to be inserted. This contains the text of textarea.
            'source_id' => $store_id,
            'comment_source' => $comment_source,
            'from_user_id' => $user_id
        );
        $result = $this->db->insert(COMMENTS, $data);

        return $this->db->insert_id(); 
    }

js スクリプト (実際のコード):

$('#add_new_comment').live('keyup',function (event) {
               if (event.keyCode == 13 && event.shiftKey) {
                   $(this).val($(this).val()+"\n");

                   return false;   
               }else if(event.keyCode == 13){

                   var store_id = "";

                   store_id = $('.c_store_comment').attr('id');

                   var new_comment = $.trim($(this).val());

                   $.ajax({
                    type:'post',
                    url:path to controller,
                    data:'comment='+new_comment+'&store_id='+store_id,
                    dataType:'json',
                    success:function(vals){
                        $.each(vals,function(i,values){
                            switch (i) {
                                    case 'error':
                                        alert('Sorry Something went Wrong');
                                    break;

                                    case 'success':
                                        var comment_div = '<div class="col1_comment2_row"><div class="col1_comment2_row_tilte">'+$('.user_name').html()+'</div>';
                                        comment_div += '<div class="col1_comment2_row_img"><a href="#nodo"><img class="delete_comment" id="'+values[1]+'" src="/images/delete_comment.png"></a> </div>';
                                        comment_div += '<div class="col1_comment2_row_cooment">'+values[0]+' </div></div>';


                                        $('.c_store_comment .scroll_container').append(comment_div);
                                        $('#add_new_comment').val('');

                                    break;
                                }                   
                        });
                    }
                   });         
               }
            });
4

2 に答える 2

3

コメントによると、問題はコメントのテキストに疑問符の文字が含まれている場合にのみ発生します。

これらの文字は実際にURLで予約されています(クエリ文字列の開始を示します)。さらに、dataオプション$.ajax()でオブジェクトの代わりに文字列を渡すため、jQueryはそれらをエスケープしないため、処理は実行されません。

ただし、jQueryのexpandoプロパティのように見えるものがサーバーに投稿される理由を説明することはできません。また、ソースコードを一目見ただけでは、明らかなことは何もわかりませんでした。ただし、問題を回避する確実な方法dataは、文字列の代わりにオプションでオブジェクトを渡すことです。

$.ajax({
    type: "POST",
    url: "path/to/controller",
    data: {
        comment: new_comment,
        store_id: store_id
    },
    dataType: "json",
    success: function(vals) {
        // ...
    }
});

そうすれば、jQueryはデータ内の予約文字を自動的にエスケープし、問題は解決するはずです。

于 2012-04-06T14:09:49.490 に答える
-1
$('#add_new_comment').live('keyup',function (event) {

        /*shft+enter for new line*/

    if (event.keyCode == 13 && event.shiftKey) {
       $(event.currentTarget).val($(event.currentTarget).val()+"\n");

       return false;   
    }else if(event.keyCode == 13){
        /*code to be inserted in db*/
    }
});
于 2012-04-06T13:46:54.740 に答える