2016-09-10 3 views
1

jQueryを使用してデータベーステーブルに新しいデータを追加しています。それから私はそのテーブルからすべてのコンテンツを取得しています。問題は、間違った配列のサイズがすべての奇妙なtime.If私はページをリフレッシュする場合、それは正しい配列のサイズを取得していますが、私はjQuery関数を使用してボタンをクリックしているすべてが台無しだ。jQueryとmysqli_num_rows()で配列の長さが正しくない

私は

$n = mysqli_num_rows($result); 

はすでにここで行

の間違ったNUMを返すことを考え出すはスクリプトです:

function getall(){ 

    $link = db_connect(); 
    $query= "SELECT * FROM jq"; 

    $result = mysqli_query($link,$query, MYSQLI_STORE_RESULT);// Smart people said MYSQLI_STORE_RESULT should help but it didn't 

    $n = mysqli_num_rows($result); 

    for($i = 0 ;$i<$n;$i++) 
     { 
      $row=mysqli_fetch_assoc($result); 

      $b[]=$row; 
     } 


    echo json_encode(array($b)); 

} 

function addstatic(){ 
    $link = db_connect(); 
    $statin_Entry = "Static Entry"; 
    $query = "INSERT INTO jq (Entry) VALUES ('$statin_Entry')"; 
    $result = mysqli_query($link,$query); 

} 

if(isset($_GET['action']) && !empty($_GET['action'])) { 
    $action = $_GET['action']; 
    switch($action) { 
    case 'getall' : getall(); break; 
    } 
} 
else { 
    if(isset($_POST['action']) && !empty($_POST['action'])) { 
     $action = $_POST['action']; 
     switch($action) { 
     case 'addstatic' : addstatic();break; 
     case 'removelast' : removelast();break; 
      // ...etc... 
     } 
    } 
} 

$(document).ready(function(){ 

    $.getallentries = function(){ 
     $.getJSON("entries.php",{action : "getall"},function(data) { 
      var content_array = $.map(data, function(e) { return e;}); 
      console.log(content_array.length); // to check array size 
     }); 

     $.addstatic = function(){ 
      $.post("entries.php",{action : "addstatic"}); 
     }; 

    }; 

    $("#adds").on("click",function(){ 
     $.addstatic(); 
     $.getallentries(); 
    }); 

    $.getallentries(); 

そして、ここではentries.phpです

これは配列ファイルのログですngth This is log of array length

この問題は再び同じ配列サイズ143,146,151と156はどこですか?

+0

'$ .addstatic()'のAJAX呼び出しが完了する前に '$ .getallentries()'を呼び出しているので、データベースはまだ更新されていません。 AJAXは非同期であることを覚えておいてください。 – Barmar

+0

コードを正しくコピーしましたか? '$ .addstatic'の定義は本当に' $ .getallentries'の定義の中にあるはずですか? – Barmar

+0

あなたがMYSQLI_STORE_RESULTについてあなたに言ったソメンはあまりスマートではありません –

答えて

0

$.addstatic AJAXコールのコールバック関数で$.getallentriesを呼び出して、$.addstaticがデータベースの更新を完了した後に実行するようにしてください。

$.addstatic = function(){ 
     $.post("entries.php",{action : "addstatic"}, $.getallentries); 
    }; 

ローをフェッチする前にmysqli_num_rowsを使用する必要はありません。

while ($row = mysqli_fetch_assoc($result)) { 
    $b[] = $row; 
} 

また、別の配列に配列をラッピングしています。やるだけ:

echo json_encode($b); 

あなたがそれを書いた方法、console.log(content_array.length)は常に1をログに記録する必要があり、私はあなたがより高い数値を取得しているかを理解していません。実際のコードを投稿してもよろしいですか?

$.mapは使用されていません。すべてのことは、dataアレイのコピーを作成することです。ちょうどdataを使用してください。

empty()は、変数が最初に設定されているかどうかを確認するため、PHPではisset()!empty()の両方をテストする必要はありません。

MYSQLI_STORE_RESULTを使用する必要はありません。このオプションはデフォルトです。

+0

それを試してみました、助けになりませんでした。私の間違いはそれがずっとばかだと思う。実際には、msqlのような基本的な要求があります。 –

+0

ありがとう、あなたが言ったようにすべてを行った。しかし、助けてくれませんでした。私は一からそれを書き直すだろう、おそらく間違った場所に関数を定義するようないくつかの愚かな間違いを持っ​​ています。 –

+0

あなたは正しく、私の問題は非同期$ .getでした。私は 'setTimeout'でそれをやっています –

関連する問題