2008-12-26 12 views
18

So habe ich eine Reihe von Datensätzen retrieved aus einer Datenbank. Das Array hat das Format;Der beste Weg, um ein Array zwischen PHP und Javascript zu übertragen

$rows[0]['id']=1; 
$rows[0]['title']='Abc'; 
$rows[0]['time_left']=200; 


$rows[1]['id']=2; 
$rows[1]['title']='XYZ'; 
$rows[1]['time_left']=300; 
//And so on upto 10-20 rows 

Was ist der beste Weg, dieses Array auf meinen Javascript-Code zu übertragen? Ich möchte, dass das Javascript in der Lage ist, alle Datensätze zu durchlaufen und das Attribut 'id' zu verwenden, um das div mit dieser ID mit einigen Informationen zu aktualisieren.

Mein JavaScript-Code befindet sich in einer externen .js-Datei, aber ich kann PHP-Code im HTML-Code meiner Seite ausführen. So kann ich so etwas tun:

In my_file.js:

var rows=New Array(); 

In HTML-Code:

<html> 
<head> 
<script type="text/javascript" src="js/my_file.js"></script> 

<script type="text/javascript"> 
<? foreach ($rows as $row):?> 
<? extract($row);?> 
rows[<?=$id;?>]['title']="<?=$title;?>"; 
//And so on 
<? endforeach;?> 
</script> 

Antwort

28

Ich neige dazu, ein JSON-Objekt für diesen Einsatz:

  • Auf der Serverseite, JSON kodieren Sie Ihre da ta: json_encode($data);
  • Auf der JavaScript-Seite, ich schreibe eine Funktion, die ein JSON-Objekt als Parameter nimmt und entpacken.

Wenn Sie das Objekt entpacken, können Sie den Inhalt des Arrays in einen <DIV> Tag drucken, oder wo auch immer Sie auf der Seite möchte (jQuery hat einen ziemlich süß Job dieser).

+2

So entpacken Sie das JSON-Objekt mit Javascript? Können Sie einen Beispielcode dafür und ein Beispiel des entpackten Objekts zu Ihrer Antwort hinzufügen? Danke –

+0

Überprüfen Sie dies: http://ditio.net/2008/07/17/php-json-and-javascript-usage/ – Stuart

+0

MooTools auch JSON encode/decode: http://mootools.net/docs/core/Utilities/JSON – samvermette

1

Um bis zu Ihrer Frage zu folgen (und meine Antwort, ich aus dem Raum auf dem Kommentar Antwort lief), ist hier eine sehr vereinfachte Teilmenge des Code, den ich verwenden:

Javascript AJAX-Handler in jQuery:

$.ajax({ 
    type: "POST", 
    url: "BACKEND.php", 
    timeout: 8000, 
    data: "var1=" + myVar, 
    dataType: "json", 
    error: function(){ 
    $("#DIVID").html("<div class='error'>Error!</div>"); 
    }, 
    success: function(jsonObj){ 
    $("#DIVID").html(jsonObj.mydata); 
    } 
}); 


PHP Array: 
$data['mydata'] = $myData; 
+0

Letzte Frage. Ich habe es versucht und ich bekomme jetzt ein "Objekt" in Javascript, das jede meiner Zeilen enthält, also denke ich, dass ich darauf als myObj [0] .title oder myObj [1] .title zugreifen würde. Das Problem ist, wenn ich den Titel von etwas durch seine ID bekommen möchte, wie kann ich es finden. Die ID in myObj wäre [1] .id oder myObj [0] .id –

+1

Versuchen Sie, eine Zeit Hinzufügen Obj.1.id Weitere Informationen über JSON Notation http://www.hunlock.com/blogs/Mastering_JSON_ (_JavaScript_Object_Notation_) siehe: var myObject = {'color': 'blau', 'tier': {'hund': 'freundlich'} }; document.writeln (meinObjekt.animal.dog); // gibt freundlich aus – barfoon

+0

Argh, ich entschuldige mich für die schreckliche Formatierung dort. – barfoon

10

Wenn Sie Inline-Daten tun, habe ich immer gemocht, für grundlegende Dinge

<script type="text/javascript"> 
window.sitescriptdata = {}; 
window.sitescriptdata.foo = (<?php echo json_encode($structure); ?>); 
</script> 

tun erspart Ihnen einen AJAX-Rückruf zu tun. Wenn Sie Daten an einen DOM-Knoten kleben möchten, ist der "Metaobjekt" -Weg etwas, das ich wirklich liebe.

<div id="foobar"> 
<div><object class="metaobject"> 
     <param name="data" value="<?php echo htmlentities(json_encode($data), ENT_QUOTES);?>" /> 
</object></div> 
</div> 

Nun, das mag nicht gut aussehen, aber es ist eine effektive Möglichkeit, Daten direkt mit einem DOM-Knoten zuordnet, ohne den genauen eindeutigen Pfad zu diesem Knoten zu kennen. Sehr praktisch, wenn Sie viele Datensätze haben, die an bestimmte Bildschirmelemente angehängt werden müssen.

ich in der Regel http://noteslog.com/metaobjects/ Plugin für jQuery verwenden, aber es ist so einfach, ich gelegentlich es selbst geschrieben haben (es gab eine Zeit, die ich nicht das Plugin finden konnte, aber neu, wie es funktionierte)

Wenn Sie fertig sind, gibt wird

$ ("div # foobar> div") sein. get(). Daten. ($ yourarrayhere)

sichtbar zu Ihrem Code.

0

ich bin immer noch ziemlich neu zu sagen, vielleicht ist diese Methode nicht die sicherste, aber Sie können immer Ihre Javascript-Array in eine Zeichenfolge und dann über die URL für die PHP zu GET übergeben.

so:

for(var i=0;i < jsarray.length;i++) 
{ 
var x = jsarray[i]; 
urlstring += "myvalue[]="+x+"&"; 
} 

document.location.href = "mypage.php?"+urlstring; 

und dann würde der PHP sein:

$phparray = $_GET['myvalue']; 

Hoffnung, die

1

In einem AJAX Beispiel wie here helfen Sie, dieses Problem auf diese Weise lösen können:

.php Datei (Ajax Return-Funktion)

$myArray = array("object_id"=>1, "object_title"=>"Testobject"); 
return json_encode($myArray); 

js-Datei (Javascript-Funktion)

... 
if(g_httpRequest.readyState == 4) 
{ 
var jsonRes = JSON.parse(g_httpRequest.responseText); 
alert(jsonRes.object_title) 
} 
...