• 締切済み

AJAXチャット

AJAXを利用したチャットを作っています。 Prototype.jsの.PeriodicalUpdaterを使って定期的にリロードすると同じ情報が繰り返し表示されてしまいます。 例えば ------------------------ 名前:aaa コメント:テスト ----------------------- とフォームに入力すると、 この情報がPeriodicalUpdaterで指定した秒数ごとに増えていってしまいます。。。 改善策を教えてください。 JavaSciriptの部分 function chat() { // パラメータを作成 var parameter = "name=" + $F('name').escapeHTML() + "&" + "email=" + $F('email').escapeHTML() + "&" + "comment=" + $F('comment').escapeHTML(); // Ajax.Updaterオブジェクトを作成 var myAjax = new Ajax.Updater( 'placeholder', // 差し込む要素 'test.php', // 呼び出し先のURL { method: 'post', // メソッド postBody: parameter, // ポストされるボディ部 } ); var myajax = new Ajax.PeriodicalUpdater('placeholder', 'test.php', {postBody: parameter,frequency: 10}); } postでサーバに送信してPHPで受け取ってます。 JavaScriptはフォームの送信ボタンによって呼び出されます。

  • AJAX
  • 回答数2
  • ありがとう数45

みんなの回答

回答No.2

定期通信はあくまで他の人が投稿した内容を受信する為だけに使用し、 自分の投稿内容を送信するのは送信ボタンを押したときだけ、というようにすべきかと思います。 毎回送信して、「入力途中」だったらどうするんですか?

回答No.1

検証してみたわけではないですが、ご質問文から解決策を推測してみました。 以下の2点を修正してみてはいかがでしょうか。 1.フォームに入力がない場合はAjaxでの送信を行わないようにする。 2.Ajaxで送信を行った後フォームの内容をクリアする。 何かの参考になればと思います。

関連するQ&A

  • jQuery $.ajax JSON形式のPOST

    jQuery $.ajax JSON形式のPOSTでフォーム内容を送信し、送信先のPHPでメール送信させるプログラムをかいているのですが、どうしても$.ajaxのerrorが呼び出される状況です。errorが呼び出されますが、PHPの方のメール送信はできております。 PHP側の出力がうまくいっていないのではないかと思いますが、原因がわかりません。どなたかご教授いただけないでしょうか?宜しくお願いします。 ---js--- $("#send").click(function(){ var NAME = $('#name').val(); var EMAIL = $('#email').val(); var TITLE = $('#titlel').val(); var COMMENT = $('#comment').val(); $.ajax({ url : "sendmail.php", dataType : "json", data : {name:NAME, email:EMAIL, title:TITLE, comment:COMMENT}, type : "post", success : function(data){ if(data != ''){ alert(data.result); } }, error : function(){ alert("通信に失敗しました。"); } }); }); ---sendmail.php--- if($_SERVER["REQUEST_METHOD"] != "POST"){ header("HTTP/1.0 404 Not Found"); return; }else{ //メール送信処理 (省略) $message = "送信完了メッセージ"; $result = array('result' => $message); echo json_encode($result); }

  • Ajax.Requestで?を含むパラメータがPOSTできなくて、困っています

    はじめまして、ajaxはほとんど初心者です。 早速質問させていただきます。 javascriptで var paramList = "link=aaa?bbb"; new Ajax.Request(url, { method: 'post', onSuccess: getData, onFailure: showErrMsg, parameters: paramList }); と入力して $_POST["link"]でパラメータを受け取ろうとしても、うまく受け取ることができません。 var paramList = "link=aaabbb"; として試してみたらうまく受け取れたので、 おそらく?に何かあると思い調べてみたのですがよくわかりませんでした。 "aaa?bbb"という文字列をそのままpostする方法はあるのでしょうか? わかる方がいらっしゃったら回答をよろしくお願いします。

  • ajax&php post 一部更新

    http://okwave.jp/qa/q7574571.html でもご質問させていただきましたが、ajaxを使用してphpファイルに記述のあるmysql insert文でデータベースの登録はできました。 bbs.php <table class="commentlist"> <!-- bbs.inc.phpファイルという別ファイルでfor文で一覧を出している。 --> </table> <!-- ここからがコメントの入力 --> <form method="post"> <input type="text" name="comment" id="comment" value="" /> <input type="button" name="save" id="save" value="投稿" /> </form> $("#save").click(function(){ var p = $("#comment").val(); $("#comment").val(""); $.post( "bbs.php", { request:p, success: (ここがわからない。)}); }); としたときにフォームでpostしたときにページ全体にリロードではなくclass="commentlist"の一覧のみリロードしたいのですが、どうもできません。 どなたかご教示お願いします。 (bbs.inc.phpはソース内には残したくないです。)

  • jqueryの$.ajaxで送信できない

    はじめまして。 jquery初心者ですが、$.ajax使ってのPOST送信ができません、php側でログを取ってみてもアクセスすらしません。若干お手上げなので、分かる方がいたら、アドバイスを頂けませんか? 【やりたいこと】 formにデータを入力(html)し → jqueryを使ってpost送信(js) → 認証(php) → 結果をhtmlに表示させたい。 【ソース】 -a.html- <form method="post" id="signin" action=""> <input id="email" name="email" value="" title="email" class="required" tabindex="4" type="text"> <input id="posturl" type="hidden" name="posturl" value="a.php"> <input id="signin_submit" value="Sign in" tabindex="6" type="submit"> </form> -------- -a.js- $(function() { $("form#signin").submit(function() { var email = $("input#email").val(); var postFile = $("input#posturl").val(); var data = {email:email}; $.ajax({ type: "POST", url: postFile, data: data, timeout: 1000, error: function(){ // エラー時 alert('Error'); }, success: function(data) { if(data != ''){ alert(data.result); } else { alert('no data'); } } }); }); }); -------- -a.php- (他略、とりあえず適当に出力してみる) echo "{'status': false,}"; exit; -------- よろしくお願いします。m_m

  • prototype.jsのAjax.Request

    javascript部分 function loadDataFile(intvalue){  new Ajax.Request("uploader.php",{   method:'post',   onComplete:function(httpObj){    test(intvalue);   }  }); } function test(intvalue){  // 画像表示のための処理 } htmlのform部分 <form action="sample.php" method="post" name="syouhintouroku" enctype="multipart/form-data">  <input type="file" id="img_path1" name="img1" value="" />  <input type="button" value="画像を確認" onclick="loadDataFile(引数);" /> </form> 今は、ざっとこのような感じで書いています。 「画像を確認」ボタンが押されると画像がアップロードされるようにしたいのですが画像が送られていません。 ちなみに、uploader.phpというのはPOST送信されてきたファイルをサーバー側のファイルに保存する処理をしています。通常のformのsubmitでは画像はちゃんとアップロードされるのでPHPファイルのほうに問題はないと思われます。 もしかして、Ajax.Requestでは画像が送れないとか書き方が違うとかいうことなんでしょうか? よろしくお願いします。

    • ベストアンサー
    • AJAX
  • Ajax.RequestでのPHP通信について

    new Ajax.Request を利用してちょっとしたメール送信フォームを作っています。 一通り完成はしたのですが、PHP側での未入力チェック後、jsでの受け取り方が分からず困っています。 ----- <javascript ソース> function postData() {  new Ajax.Request(   "send.php", {    method: "post",    parameters: Form.serialize("myform"),    onComplete: onCompleteHandler   }  ); } function onCompleteHandler(request) {  // ここでPHP側から未記入チェックを受信したい } <PHP ソース> // 必須項目チェック if( $formValue1 == "" || $formValue2 == "" ) {  // ここから未記入を通知したい } ----- このようにPHP側で記入チェックし、それをjs側で受けとる方法が分からず困っています。 すみませんがどなたか教えていただけると助かります。

  • IEでAjax

    現在、以下のソースをもとにAjaxのテストをしているのですが FireFoxだと正常に動作されますが、IE8だと無反応です。 もちろんJavaScriptは有効にしています。 この原因はどこにあるのでしょうか? ■test.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitiona..."> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>テスト</title> <script type="text/javascript"> <!-- var ajax = new XMLHttpRequest(); function makeTable(keyword) {  ajax.onload = function() {   document.getElementById('layerTable').innerHTML = ajax.responseText;  }  ajax.open('GET', 'sample.php?keyword=' + keyword, true);  ajax.send(null); } </script> </head> <body> <h1>Ajaxのテスト</h1> <form id="formMain" name="formMain" method="post" action=""> <p>キーワードを入力して、表示するボタンをクリックしてください。</p> <p> <input type="text" name="keyword" size="35"> <input name="buttonMake" type="button" id="buttonMake" value="表示する" onClick="makeTable(this.form.keyword.value)" /> </p> </form> <div id="layerTable">ここに応答が表示されます</div> </body> </html> ■sample.php <?php $keyword = $_GET['keyword']; $doc = "<b>Ajaxのテストです</b><br />"; $doc .= "キーワードは{$keyword}"; print($doc); ?>

    • ベストアンサー
    • AJAX
  • Dojo1.2でAjaxのpostをしたい

    こんにちは。 Dojo1.2でAjaxのPostをしているのですが、値が受けわたっていきません。 ファイルアップロードをしているのですが、Fileを認識しません。 確認はIE6で行ってます。 ・呼び出し元 var param = new Object(); param['file'] = document.edit._file.value; ajaxPost("test.action", param); ... <form name="edit" enctype="multipart/form-data" method="post"> <input type="file" name="file" id="_file" size="50" maxlength="255" value=""/> </form> ・Ajax呼び出し function ajaxPost( rurl, parameters) {  dojo.xhrPost ({   url: rurl, //form: 'post-form',   parameters: parameters,   load: function (data) {   },   error: function (error) {    alert(error);   }  }); } このようにしていますが、どこが悪いのでしょうか?できればform=editで指定できれば良いのですが・・、エラーとなってしまう為、parameterとして格納したつもりです。 Action内には到達しているのですが、Fileを認識できていない状態です。(フレームワークはwebwork2を使ってますが、省略しました) お分かりになりましたら、よろしくお願いします。

  • ajax でのデータ受け渡しに関して

    ajax でのデータ受け渡しに関して わかりにくい内容で申し訳ありません。 現在、PHPで作成されているプログラムの中に、ajaxを組み込みたいと考えています。 処理の動きとしては、あるプルダウンが選択された場合、すぐさまその値をもとにしてDBへ 検索しに行くというものです。 通常、PHPだけの処理の場合、POST等を用いて、ボタンが押されたら違うphpファイルへ値を 送る事が可能かと思われます。 その処理をajax で選択されたらすぐに検索、表示というような動きをしたいと考えて います。 但し、同じソース、画面上の中でなら、以下のような記述で表示させる事は可能かと 思われますが、HTMLで分割した画面で、上段で選択されたプルダウンの値をもとにして、検索 された結果を下段に表示させたいと考えています。 そもそも、ajaxでは同じ画面上での受け渡ししかできず、上記のように分割されたものでは 不可能なのでしょうか。。。 初歩的な内容で申し訳ありませんが、教えて頂きたいと思います。 《記述内容》 ※ 現状では以下のようなサンプル記述をもとに、自画面(同一)上では表示が可能となっています。 <script> function createXMLHttpRequest(){ if( window.XMLHttpRequest ){ return new XMLHttpRequest(); }else if( window.ActiveXObject ){ try{ return new ActiveXObject( "Msxml2.XMLHTTP" ); }catch(e){ return new ActiveXObject( "Microsoft.XMLHTTP" ); } } return null; } function getDataPost( serverURL, objID ,obj){ var ajax = createXMLHttpRequest(); ajax.open( "POST", serverURL ); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange=function(){ if(( ajax.readyState == 4 ) && ( ajax.status == 200 )){ if(objID!=""){ var obj = document.getElementById( objID ); obj.innerHTML = ajax.responseText; } } } ajax.send( obj.name+"="+obj.value ); } </script> <select name="fuga" onchange="getDataPost('hogehoge.php','hoge',this)"> <option value="">---</option> <option value="1">1</option> <option value="2">2</option> </select> <div id="hoge"></div> よろしくお願いします。

    • ベストアンサー
    • AJAX
  • ajaxでtxtを取得する

    基本的なことかもしれませんが、質問します。 prototypeのライブラリを使ってajaxに挑戦しています。 ******************** var D = { method : "get", onSuccess : function(){...} }; new Ajax.Request("dara.txt", D); ******************** この方法だと、キャッシュ(?)を読み込んでしまうのか、 cgiでの変更点がすぐに反映されてこないので、このようにしました。 ******************** var D = { method : "get", parameters : "n=" + Math.random(), //←ここを追加 onSuccess : function(){...} }; new Ajax.Request("dara.txt", D); ******************** これで、毎回ちゃんとサーバーから読み込むようになりましたが、 このスクリプトを実行するたびにインターネット一時ファイルに保存されるので、 ものすごい数のテキストファイルが保存されてしまいます。 毎回サーバーから読み込んで、且つ、一時ファイルに残さない方法をご存知の方は、ご教示願います。

    • ベストアンサー
    • AJAX

専門家に質問してみよう