1

私は現在、HTML、AJAX、PHP、およびMYSQLを学習しようとしています。私は現在、内部使用のためだけにWebアプリを構築しています。動作しているように見えましたが、MYSQL関数を使用したコードで多少の遅延が発生しています。

何が起こるかです:

まず、SQLデータベースからいくつかの「プロファイルイメージ」を作成します。このようなPHPを介して:

   <?php
    $price = 30;
    $con = mysql_connect('localhost', 'root', 'root');
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
    mysql_select_db("Og297", $con);
    $result = mysql_query("SELECT * FROM Og297.Drinkers");

    while($row = mysql_fetch_array($result))
        {
        $picture = $row['Picture'];
        $name = $row['Name'];
        $nameup= $name."up";
        $namep= $name."p";

        $Onbetaaldresult = mysql_query("SELECT COUNT(Betaald) AS ob FROM Og297.Bierlijst
        WHERE Betaald='1' AND Name='$name'");
        $Onbetaaldarray= mysql_fetch_array($Onbetaaldresult);
        $Onbetaald= $Onbetaaldarray['ob'];


        $Betaaldresult = mysql_query("SELECT COUNT(Betaald) AS b FROM Og297.Bierlijst
        WHERE Betaald='0' AND Name='$name'");
        $Betaaldarray= mysql_fetch_array($Betaaldresult);
        $Betaald= $Betaaldarray['b'];

    echo "<div onclick=\"addBeer('$name','$price');\" class= 'thumbnail'><img src= $picture height= '90' width= '90' alt= $name title= $name><div class= 'overlay'><span id=$nameup  class='unpaid'>$Onbetaald</span><span id= $namep class='paid'>/$Betaald</span></div></div>";
        }
    mysql_close($con);

    ?>

つまり、これはすべてのユーザーに画像divを表示し、さらにIDの有料と未払いにまたがることを示します(このアプリは、支払ったビールの量とまだ支払う必要のある量を追跡するためのものです)。これはすべて機能します:)

次に、いくつかの機能があります。

addBeerは、その人の名前を含むビールをテーブルに広告します。これはAjaxを介して行われます。

function addBeer (n,p)
{
$.post("AddBeer.php",{naam: n, price: p});
updateBeer(n);
} 

したがって、ビールをデータベースに挿入した後、有料スパンと未払いスパンを更新する必要があります。私はupdateBeerを使用してこれを行います。

function updateBeer (n) 
{
$.post("UpdateBeer.php",{naam: n},function(data) {
changeInfo(n,data.betaald,data.onbetaald);
},"json");
}

これにより、Jsonオブジェクトの支払い済みと未払いの金額が返されます。これらの値(人の名前を含む)はchangeInfo関数に与えられ、スパンは次のように更新されます。

function changeInfo(n,b,ob)
{
window.alert("ja");
document.getElementById(n + "up").innerHTML=ob;
document.getElementById(n + "p").innerHTML="/" + b;
}

ただし、画像をクリックするたびに情報が更新されるわけではありません。遅れてビールがタフに挿入されますが、スパンの更新は行われていません。どうして?

この巨大な質問を読んでくれてありがとう!

4

1 に答える 1

0

私のコードの問題は、AJAXリクエストが非同期であるということでした。したがって、AJAXリクエストが完了する前にスクリプトの残りの部分が実行されると、問題が発生します。秘訣は、AJAXリクエストを設定してAsyncをfalseに設定することでした!

ありがとう!

于 2013-01-16T09:28:26.507 に答える