2016-04-25 19 views
0

ボタンを押してページの内容を更新すると、データベースのptsフィールドを追加または減算しようとしていますが、オートリフレッシュするときはAjaxのタイマーで表示中です。php関数のボタンがajax呼び出しの後に動作しない

私はページを呼び出すために、このスクリプトを使用しています:私は、このボタンをクリックし、現在唯一の方法を呼び出す作るとき

$(document).ready(function(){ 
     var timer, delay = 1000;    // 1 second(s) counted in milliseconds 
     var Pts = '';       //ID value of users answer 
     var info = {'userPts': Pts};   //naming POST for php 
     timer = setInterval(function(){ 
      $.ajax({ 
       url: "inc/ans.php",   //sends to ans page where php function updates DB 
       type: "POST", 
       data : info,     //stuff being sent to php 
       success:function(data) 
       { 
        $("div #ans").html(data); //Retrieves answers made by user 
       } 
      }); 
     }, delay); 

私の問題は、手動でページ全体を更新することですし、私のことができますよボタンをクリックし、ユーザーのpts値を更新します。私はどちらか一方を行うことができますが、同時にではなく、コンテンツを自動更新する場所に持っていますが、ボタンを押してアクションを完了させることはできません。ボタンを押すことができますが、コンテンツを自動更新することはできません。加算および減算する

PHP機能はほぼ同じ、彼らはこのようにされている2つの機能間

function addPoint($mysqli, $id) 
    { 
     $stmt = $mysqli->prepare(' 
     UPDATE tbl_user 
     SET user_pts = user_pts + 1 
     WHERE user_id = ?'); 
     $stmt->bind_param('i', $id); 
     $stmt->execute(); 
     $rows = $stmt->affected_rows; 
     $stmt->close(); 
     if($rows == 1) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

唯一の違いは、その-1または+1事実です。なぜこのようなことが起こるかについてのアイディアこれはAjaxと呼ばれ、これはPHP関数またはvicと干渉しています。その逆?

EDIT:これは、ボタン

function getScore_I($mysqli) 
    { 
     $stmt = $mysqli->prepare(' 
     SELECT user_name, user_pts, user_id 
     FROM tbl_user'); 
     $stmt->execute(); 
     $stmt->bind_result($user, $pts, $id); 
     $O =""; 
     $x = 1; 
     $O.="<table style=\"text-align:center;width: 100%\"><form action=".$_SERVER['PHP_SELF']." method=\"POST\">"; 
     while($stmt->fetch()) 
     { 
      if($x%2) 
      { 
       $O.= "<tr style=\"text-align:center;width: 100%\"> 
         <td>".$user."</td> 
         <td> 
          <button name=\"userIDmiunus\" type=\"submit\" value=\"".$id."\">-</button> 
         </td> 
         <td>".$pts."</td> 

         <td> 
          <button name=\"userIDplus\" type=\"submit\" value=\"".$id."\">+</button> 
         </td> 
        </tr>"; 
       $x++; 
      } 
      else 
      { 
       $O.= "<tr style=\"text-align:center;width: 100%\"> 
         <td>".$user."</td> 
         <td> 
          <button name=\"userIDmiunus\" type=\"submit\" value=\"".$id."\">-</button> 
         </td> 
         <td>".$pts."</td> 

         <td> 
          <button name=\"userIDplus\" type=\"submit\" value=\"".$id."\">+</button> 
         </td> 
        </tr>"; 
       $x++; 
      } 
     } 
     $O.= "</form></table>"; 
     // close statement 
     $stmt->close(); 
     return $O; 
    } 
+0

なぜあなたはタイマーを使うのですか....あなたは、AJAX経由でPHPの関数を実行しますか? Clicked?...はいの場合、タイマーの代わりにclickイベントを使用してみてください。 –

+0

私はちょうど答えがデータベースに追加されたとき、またはインストラクター側で新しいpts値が割り当てられるときに彼が自動的に彼のページを更新する固定タイマーを持ってほしいスーパーユーザー、あなたがそうであれば、1をasigning pts – Apparatus17

答えて

2

でインストラクターに表示されているコードであり、それは、ボタン要素がAJAX経由で持ち込まコードに含まれている場合か?もしそうなら、あなたはのように、.on()を使用する必要があります:あなただけ$.ajax()のショートカットバージョンである、​​をやっているようなあなたのコードを確認

$(document).on('click', '.buttonClassName', function(){ 
    //do your click code here 
}); 

、それが見えます。 Iはまた、すべての状況で$.ajax()を使用して好む - 新しいデータが.html()介してDOMに注入されると$.load()$.get()及び$.post()は同様に完全$.ajax()

ように構成されていない使用して、任意のコントロールはJavaScriptコードに結合されていませんバインディングコードは注入前に実行されていたためです。 2つの解決法:あなたはDOMの中にたくさんのコードが重複していることを意味するバインディングをいくつか追加して再作成することもできます。あるいは、DOM内の現在の要素だけでなく、特定のクラスまたはIDを持つDOMまたはのjQueryセレクタを使用します。

また、PHP関数にアクセスするためにAJAXを使用する必要がある可能性があります。 this postとそれが参照する投稿/ AJAXに関するへのリンクを参照してください。例を見てください。


はい、あなたは.on(),内の別のAJAX機能を呼び出すことができますし、それはあなたが何をする必要があるかと考えられます。

AJAXは、のWebページがレンダリングされた後で、かつ現在のページをリフレッシュ/残していない状態で、PHPコードを実行する方法です。

コードは次のようになります:

$(document).on('click','.buttonClass', function(){ 
    var Pts = '';       //ID value of users answer 
    var uid = $('hidden_input_where_you_stored_userID').val(); 
    var info = {'userID': uid, 'userPts': Pts};   //naming POST for php 
    $.ajax({ 
     url: "inc/another_file.php", 
     type: "POST", 
     data : info, 
     success: function(data) { 
      //whatever you need to do after updating point score 
     } 
    }); 
}); 

another_file.php:

<?php 
    $id = $_POST['userID']; 
    $pts = $_POST['userPts']; 
    //do your DB update 
+0

ボタンは、ajaxによって呼び出されているphpの一部であり、php関数でそれを広告する必要がありますか? – Apparatus17

+0

その中で私は別のajax関数を呼び出すことができますか? – Apparatus17

+0

私は$ .ajax()を使用していません.load()... – Apparatus17

関連する問題