2016-06-29 9 views
1

Edit/Clarification: Ich habe eine PHP-Seite, nenne es displayPhotos.php, in dem ich einen AJAX-Aufruf auf eine andere PHP-Seite, nennen Sie es getPhotos .php, die eine Datenbank abfragt und Bildinformationen (Bildunterschrift, Dateiname usw.) an displayPhotos.php zurückgibt, wo sie angezeigt werden. Ich verwende PHP in displayPhotos, um die von getPhotos zurückgegebenen Daten zu manipulieren. Die zurückgegebenen Daten vom Ajax-Aufruf sind ein zweidimensionales Javascript-Array. Ich muss das Javascript-Array in ein PHP-Array umwandeln, damit ich sie und andere Dinge anzeigen kann. Wie mache ich das? Hoffe, das hilft.Javascript scope von array und konvertieren js array zu einem php array


Meine Augen schmerzen beim Lesen aller Dokumente.

Ich möchte Ajax verwenden, um eine Datenbank abzufragen, geben Sie die Daten zurück und verwenden Sie dann PHP, um mit der Webseite fortzufahren.

Alle Beispiele, die ich mir angesehen habe, beginnen mit dem Erstellen des JSON in PHP. Ich muss mit dem json-Objekt in Javascript beginnen.

In diesem Fall übergebe ich nichts an die PHP-Datei, die die DB abfragt. Das Konsolenprotokoll zeigt an, dass der Dateiname im Photoarray korrekt ist, aber sobald es außerhalb dieser Funktion ist, verschwindet es, obwohl es als global deklariert ist, ich denke es ist trotzdem. Warum und was muss ich tun, um das zu beheben?

Die PHP-Datei macht nur eine SELECT * FROM ..... und gibt alles zurück.

// in fhs_get_photos.php 
    // SELECT * FROM table...... 
    echo $json = json_encode($result); 
    return $json; 

So habe ich jetzt das Array zurück, aber es ist in Javascript. Wenn ich das Scope-Problem herausgefunden habe, wie kann ich dieses Javascript-Array in ein PHP-Array konvertieren?

<h3>Welcome to the Historical Society's historical photo archive 
    </h3> 
    </header> 
    <figure id="photo_figure"> 
     <script> 
     //line below gets me: SCRIPT5007: Unable to get property 'thumb' of 
     //undefined or null reference 
     console.log("photoarray thumb: ") + photoarray[0]['thumb']; 
     </script> 

Erkläre ich das richtig?

+0

Wenn Sie Ajax entscheiden, gibt es keine Weitergabe wieder PHP, PHP-render bereits geschehen ist und es sei denn, Sie aktualisieren, won't wieder passieren .Sie müssen das Dom, das Sie in Ihrer Erfolgsfunktion mit den neuen Daten benötigen, manuell bearbeiten/erstellen – juvian

+0

Ich verstehe nicht, warum müssen Sie js-Array in PHP-Array konvertieren und wo sollte es geschehen? Ihre Antwort kommt als JSON, Sie müssen es analysieren "photoarray = JSON.parse (photo_array)". Danach ist es zu verwenden, wenn es im globalen Bereich gespeichert wird - dann sollte es für andere Skripte sichtbar sein (wenn sie ausgeführt werden, nachdem die Antwort erhalten wurde) –

+0

@juvian Siehe meine Klarstellung. Wie kann ich das dom mit php mit den Daten im javascript array erstellen? – eric

Antwort

1

Zuerst ist AJAX async. Dies bedeutet, dass es die Anforderung sendet, wenn Sie es anfordern, aber die Antwort irgendwann später erhält. Und es funktioniert, nachdem PHP die Seite gerendert und gesendet hat. Damit. Wenn Sie ein Update über AJAX erhalten, müssen Sie Javascript verwenden, um dieses Update zu machen. Die einfachste Lösung besteht darin, die Antwort direkt im Erfolgsrückruf zu verarbeiten. Auf diese Weise müssen Sie sich nicht mit dem globalen Umfang herumschlagen (was eine schlechte Praxis ist).

Angeblich soll Ihre HTML ist wie folgt:

<header> 
    <h3>Welcome to the Historical Society's historical photo archive 
    </h3> 
    </header> 
    <div id="figures"></div> 

Sie es tun können, indem Sie eine Funktion deklarieren, die die Verarbeitung Griffe:

function updateDom(photoArr) { 
    var $figures = $('#figures'); 

    $.each(photoArr, function() { 
    console.log(this); 
    $figures.append('<img src="' + this.thumb +'">'); 
    }); 
} 

-Code unten in den Erfolg Rückruf platziert

Und führen Sie diese Funktion im Erfolgsrückruf aus und übergeben Sie ihr das Array von json, das analysiert wurde und zu einer gültigen js wurde Objekt.

var photoArray = JSON.parse(photo_array); 
updateDom(photoArray); 

hier ist der fiddle, aber es ist für den DOM Teil nur

+0

danke für die Antwort. Wenn ich Sie richtig verstanden habe, wird der gesamte PHP-Code ausgeführt, bevor JavaScript-Code ausgeführt wird. Das Javascript erstellt die Ajax-Anfrage, sendet sie und empfängt die Daten zurück. Der gesamte PHP-Code wurde bereits ausgeführt, so dass ich keine weitere PHP-Verarbeitung machen kann. Habe ich Sie richtig verstanden? – eric

+0

Ja. PHP zuerst, dann alle synchronen js, dann asynchrone js (Ereignisse, AJAX, etc). Es gibt keine Möglichkeit zu wissen, wann genau Async-Teile ausgeführt werden, daher sollte der gesamte Code, den sie ausführen müssen, irgendwie an sie angekettet sein. Callback-Funktionen sind das Standardmuster für diese Verkettung. Es gibt auch Versprechen, aber es ist besser, Rückrufe zuerst zu verstehen. Aber Ajax stellt eine Anfrage. Diese Anfrage wird von PHP verarbeitet, also gibt es PHP, das während async js Teil ausgeführt wird. Sie können HTML mit diesem PHP rendern und es an js senden. Dann musst du js verwenden, um den HTML-Code anzuhängen, wo er hingehört. –

Verwandte Themen