2016-07-28 15 views
0

Meine PHP-Datei ruft Daten aus einer PostgreSQL-DB ab. Ich muss sie in zwei verschiedenen Arrays an meine jQuery-Funktion zurücksenden. Man wird durch die Verwendung übergeben:jQuery get json_encode Variable aus PHP

echo json_encode($tb); 

und funktioniert gut, in meiner js Datei i Daten korrekt erhalten, indem mit:

$.ajax({ 
    type: "POST", 
    url: './DB/lb.php', 
    data: {d_p: oa}, 
    success: function (tb) { 
     console.log(tb); 
}) 

Konsolenausgabe ist wie erwartet.

Der andere ist immer ein PHP-Array, aber ich habe Zeichen ersetzen:

str_replace(array('[', ']'), '', htmlspecialchars(json_encode($ltb), ENT_NOQUOTES)); 

aber wenn ich schreibe:

$.ajax({ 
    type: "POST", 
    url: './DB/lb.php', 
    data: {d_p: oa}, 
    success: function (tb, ltb) { 
     console.log(tb); 
     console.log(ltb); 
}) 

console.log (LTB) einfach ausgibt

success

was ich bin ich falsch?

+2

Sie können nur eine einzige Antwort in einer AJAX-Anfrage zurück. Ich bin sehr verwirrt darüber, was Sie versuchen, obwohl - warum brauchen Sie die gleichen Daten zweimal zurückgegeben? Wenn Sie das Format der zurückgegebenen Daten ändern müssen, tun Sie es clientseitig von dem Objekt, das Ihrem 'success' Handler zur Verfügung gestellt wird. –

+0

Warum wollen Sie Array und nicht nur json string drucken, wie es funktioniert, wie Sie sagen –

+1

Sie müssen dies hinzufügen zu $ response ["tb"] = $ tb; $ Antwort ["ltb"] = $ ltb; echo json_encode ($ antwort); und bei Erfolg nur Erfolg: function (response) {console.log (response.tb); console.log (antwort.ltb)} – rad11

Antwort

0

Der zweite Parameter von succes ist der Antwortstatus. Dies ist der Grund, weil Sie success beim Loggen tlb erhalten.

können Sie nur eine JSON Rückkehr zur Zeit an, so kombinieren sie:

echo json_encode(array("other stuff", "tb" => $tb, "tbl" => array("some" => "data"))); 

Auf JS Seite können Sie einfache acces sie durch Index oder Schlüssel:

tb[0]; // "other stuff" 
tb.tb; // content of $tb variable 
tb.tbl; // {some: "data"} 
+0

'tl' steht für was? Wird nirgends referenziert – RobMor

+0

Tut mir leid, ich habe 'tl' anstelle von' tb' verwendet. Fest. @MorRob – eisbehr

+0

'echo json_encode (Feld (" tb "=> $ tb," ltb "=> Feld (str_replace (Feld ('[', ']'), '', htmlspecialchars ($ ltb, ENT_NOQUOTES))))); 'gibt jetzt zurück ** undefined ** – RobMor

0

Der letzte Arbeitscode:

PHP:

$tb = array(); 
$ltb = array(); 
    while ($row = pg_fetch_array($result, NULL, PGSQL_ASSOC)) 
    { 
     array_push($ltb, $row["x"], $row["y"]); 
     array_push($tb, $row["z"],$row["t"]); 
    } 

    echo json_encode(array('tb'=>$tb,'ltb'=>$ltb)); 

JS

$.ajax({ 
    type: "POST", 
    url: './DB/lb.php', 
    dataType: 'json', // this is what I forgot!!! 
    data: {d_p: oa}, // passes variable for PHP function 
success: function (response) { 
     console.log(response.tb+" "+ response.ltb); 
$.each(response.tb, function(i, item) { 
    // iterate over tb array 
} 
$.each(response.ltb, function(i, item) { 
    // iterate over ltb array 
} 
});