1

サーバーからphpファイルを介して25食を含むjson文字列を取得しています。php は、javascript 関数によって開始されます。次に、json をオブジェクトの配列に変換します。

応答ストリームには正しい値があります。alert() は、すべてのステップで正しい値を示します。完全なストリームが完了すると、配列は再び突然空になります。これは私の問題であり、私はこれについて迷っています。何をグーグルするべきかさえわかりません。

私のphpとjavascriptからコードを貼り付けるだけです。JavaScript コードの最後にある 3 つの Alert() に注意してください。これらは何が起こるかを示しています。

ここにphpがあります

<?php
$mysqlHOST = "localhost";
$mysqlUSER = "xxx";
$mysqlPW = "xxx";
$mysqlDB = "xxx";
$mysqlERROR = "Could not connect to database!";
$mysqlERRORDB = "Could not connect to database - DB-Error!";

@mysql_connect($mysqlHOST,$mysqlUSER,$mysqlPW) or die($mysqlERROR);
@mysql_select_db($mysqlDB) or die($mysqlERRORDB);

@mysql_query('SET CHARACTER SET utf8');
$res = mysql_query("SELECT * FROM Rezepte");

while($Row = mysql_fetch_array($res)) 
{      
    $jsondata[]= array('f1'=>$Row["id"], 'f2'=>$Row["data"], 'f3'=>$Row["art"],'f4'=>$Row["name"],'f5'=>$Row["zutaten"],'f6'=>$Row["info"],'f7'=>$Row["bild"]);
}; 

echo(json_encode($jsondata));
?>

ここにJavascriptがあります。

//Variablen
varRezepte = []; //Liste mit den Rezeptobjecten

//Konstruktor für die Rezept - Objekte
function objRezept(varid, data, art, name, zutaten, info, bild)
{
    this.varid = varid;
    this.data = data;
    this.art = art;
    this.name = name;
    this.zutaten = zutaten;
    this.info = info;
    this.bild = bild;
}

//wenn Page gepaden ist soll das folgende passieren
$(function()
{   
    //Datenbank bemühen um die Rezepte herzubekommen    
    $.ajax({
                type: "POST",
                url: "planerDB.php",
                dataType: "json",
                success: function (data) 
                {
                    for(var i = 0;i < data.length;i++)
                    {
                      var item = data[i];
                      varRezepte.push(new objRezept(item.f1, item.f2, item.f3, item.f4, item.f5, item.f6, item.f7));
                      alert(varRezepte[i].name); //correct output
                    }   
                }
            }); 

    alert(varRezepte[0].name); //undefined
    alert(varRezepte.length); //zero
});
4

2 に答える 2

2

行が実行された時点では空であり、覚えておいてください.. Ajaxは非同期です

ステートメントは、リクエストが完了する前でも実行されます。したがって、あなたが言及した時点では常に未定義になります。

于 2013-08-01T23:41:02.013 に答える
0

最後の 2 つalertはコールバックの外にあり、ajaxが完了する前に実行され、データがありません。

于 2013-08-01T23:43:07.010 に答える