質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.58%

jqueryのajaxを使用しているが処理がphp側へいかない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 720

aushijima

score 53

実現したいこと

送信ボタンを押した際にテキストエリアに入力されたデータをajaxでphp側へ送りたいが送ることができないので送れるようにしたいです。

現状

エラーなどは、出ないのですが、php側に埋め込んだログメッセージなどがログに書き込まれていないので、処理がphp側に来ていない状態です。

実際のソースコード

●html・js側

                <div class="chatRoomFooter">
                    <form method="post" name="chat_direct" enctype="multipart/form-data">
                        <div class="input textareaParts expand">
                                <div class="minTextareaParts selfclear">
                                    <div class="textareaWrapper">
                                     <textarea class="commonContent" name="GROUP_CHAT_EXCHANGE_COMMENT_TEXT" id="GROUP_CHAT_EXCHANGE_COMMENT_TEXT" placeholder="コメントを入力"></textarea>
                                    </div>
                                    <div class="functionButton">
                                        <button id="direct_chat_create"  name="direct_chat_create" class="submit direct_chat_create">送信</button>
                                    </div>
                                </div>
                        </div>
                    </form>
                </div>

// ##################################################
// ダイレクトチャット部分やり取り関係機能
// ##################################################

$(function() {
  //登録した際の投稿部分のカウント数
  var registerNum = 0;

  //登録処理をする際のajaxの記載
  $(document).on('click','button[name="direct_chat_create"]',function(){

    //送信する時の登録用のオブジェクトを作成する
    var senddata = new Object();

    //登録するコメント本文を作成
    $('textarea.commonContent').each(function(){
      senddata[$(this).attr('id')] = $(this).val();
    })
    //登録するボタンの情報を作成
    $('button[name="direct_chat_create"]'.each(function(){
      senddata[$(this).attr('id')] = $(this).val();
    }))

    if (window.XMLHttpRequest) {
        ajax = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      //IEで使用する時などに使用する
        ajax = new ActiveXObject("MSXML2.XMLHTTP.3.0");
    }
    // Ajaxでのカテゴリの登録・削除

    $.ajax({
        type: "POST",
        url: "library/Api/chatDirect.php",
        data: senddata,


        done: function (senddata) {
            $('.chatRoomCommentBlock').after("<div id=\"new_direct_chat_comment_"+registerNum+"\"></div>");
            $('#new_direct_chat_comment_'+registerNum).html(senddata);
            registerNum++;
        },
        fail: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
        }
    })
  });

  //登録した投稿に関して返信をする際に必要
  $(document).on('click','a[id="reply_comment"]',function(){
    //返信した際のhtml要素を取得する
    var className = $(this).attr('class');
    var directExchangeList = className.split('_');

    //ダイレクトチャットの時の返信コメント番号
    var direct_chat_exchange_reply_comment_no = directExchangeList[2];
    //ダイレクトチャット時の表示番号
    var direct_chat_exchange_display_no = directExchangeList[3];

    //作成するhtmlタグを作成(返信したコメントとお気にいりやいいねや返信ボタンを表示させる)
    $('#reply_to').html(
        direct_chat_exchange_display_no+'へ返信する'
        +'<a href="javascript:void(0);" id="reply_cancel">×</a>'
        +'<input type="hidden" class="direct_chat_create" id="direct_chat_exchange_reply_comment_no" value="'+direct_chat_exchange_reply_comment_no+'">'
    );

  });
})

●php側

<?php
// library直下のlibrary.phpを読み込むように設定する
require_once(preg_replace('/Api[\\/\\\]chatDirect.php/','',__FILE__).'library.php');
$chat = new Chat;


##########################################
// ダイレクトチャットで必要になる機能
// 送信ボタンを押した時に投稿内容が登録される
// 空で送信ボタンを押すと登録の処理が行われない
// 自分で作成した投稿に関しては、削除することが可能
// 投稿内容に関していいね、お気に入り登録、返信などをすることができる。(自分の投稿や相手の投稿に関わらず、つけれる)
##########################################
  logger('処理は、来ているよ');
//コメントが入力されいる時は、送信ボタンを押すと登録処理が走る
if(!empty($_POST['direct_chat_create'])){
  dbg('ボタン押されたよ');
  //コメントが入力されていれば登録処理を行う
  if(!empty($_POST['GROUP_CHAT_EXCHANGE_COMMENT_TEXT'])){
    dbg('データがちゃんと来てるよ');
    $chat->setDirectChatExchange($_POST['group_chat_no'],$_POST['GROUP_CHAT_EXCHANGE_COMMENT_TEXT'],$reply_to_dairect_chat_comment_no);
  }else{
    // コメントが入力されていない時は、何も行わない
  }
}else{
  logger('押されていないよ');
}

良かったら教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

なんかtypoが多いし、無駄なものもあるので以下でチェックしてみてください

  • html
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
  var registerNum = 0;
  $(document).on('click','button[name="direct_chat_create"]',function(e){
    e.preventDefault();
    var senddata = new Object();
    $('textarea.commonContent').each(function(){
      senddata[$(this).attr('id')] = $(this).val();
    });
    $('button[name="direct_chat_create"]').each(function(){
      senddata[$(this).attr('id')] = $(this).val();
    });
    $.ajax({
    type: "POST",
    url: "send.php",
    data: senddata,
    }).done(function (senddata) {
      $('.chatRoomCommentBlock').after("<div id=\"new_direct_chat_comment_"+registerNum+"\"></div>");
      $('#new_direct_chat_comment_'+registerNum).html(senddata);
      registerNum++;
    }).fail(function (XMLHttpRequest, textStatus, errorThrown){
      alert(errorThrown);
    });
  });

  $(document).on('click','a[id="reply_comment"]',function(){
    var className = $(this).attr('class');
    var directExchangeList = className.split('_');
    var direct_chat_exchange_reply_comment_no = directExchangeList[2];
    var direct_chat_exchange_display_no = directExchangeList[3];
    $('#reply_to').html(
      direct_chat_exchange_display_no+'へ返信する'
      +'<a href="javascript:void(0);" id="reply_cancel">×</a>'
      +'<input type="hidden" class="direct_chat_create" id="direct_chat_exchange_reply_comment_no" value="'+direct_chat_exchange_reply_comment_no+'">'
      );
  });
});
</script>

<div class="chatRoomFooter">
<form method="post" name="chat_direct" enctype="multipart/form-data">
<div class="input textareaParts expand">
<div class="minTextareaParts selfclear">
<div class="textareaWrapper">
<textarea class="commonContent" name="GROUP_CHAT_EXCHANGE_COMMENT_TEXT" id="GROUP_CHAT_EXCHANGE_COMMENT_TEXT" placeholder="コメントを入力"></textarea>
</div>
<div class="functionButton">
<button id="direct_chat_create"  name="direct_chat_create" class="submit direct_chat_create">送信</button>
</div>
</div>
</div>
</form>
</div>
<div class="chatRoomCommentBlock"></div>
  • send.php
<?php
$direct_chat_create=filter_input(INPUT_POST,"direct_chat_create");
$GROUP_CHAT_EXCHANGE_COMMENT_TEXT=filter_input(INPUT_POST,"GROUP_CHAT_EXCHANGE_COMMENT_TEXT");

if(!is_null($direct_chat_create)){
  print 'button pushed<br>';
  if(!is_null($GROUP_CHAT_EXCHANGE_COMMENT_TEXT) and $GROUP_CHAT_EXCHANGE_COMMENT_TEXT!==""){
    print 'get data<br>';
  }else{
    print 'no data<br>';
  }
}else{
  print 'button not pushed<br>';
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/22 15:32

    ありがとうございます。ちなみに、php側でデータベースに登録したい時に
    urlの中の
    chat_direct?group_chat_no=1
    group_chat_noの情報などもajaxで送る時も、php側で
    $direct_chat_create=filter_input(INPUT_POST,"group_chat_no");
    のようにしてあげれば良いですか?

    キャンセル

  • 2018/11/22 15:38

    > ?group_chat_no=1

    $group_chat_no=filter_input(INPUT_GET,"group_chat_no");

    でしょうね。ただしgetとpostを一緒に送るのは混乱の元ですけどね
    それがapiの仕様ならしかたないでしょう

    キャンセル

  • 2018/11/26 15:34

    ありがとうございました。無事に表示できました。

    キャンセル

+1

    //登録するボタンの情報を作成
    $('button[name="direct_chat_create"]'.each(function(){
      senddata[$(this).attr('id')] = $(this).val();
    }))


ここ

    //登録するボタンの情報を作成
    $('button[name="direct_chat_create"]').each(function(){
      senddata[$(this).attr('id')] = $(this).val();
    })


こうでは?( .eachの前に括弧)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/22 14:56

    記述ミスをしていましたね。ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る