2017-08-11 1 views
0

Ich versuche Ajax zu bekommen, Bilder für eine interne Galerie zurückzugeben. Ich habe es die Bilder zurückgeben, die ich will, das einzige Problem ist, dass die zurückgegebenen Bilder ist eine Anfrage zurück.Ajax-Anfrage hält die letzte Anfrage zurück

z. Wenn ich angerufen return_img("test", 1, 5) keine Bilder zurückgegeben werden, aber wenn ich return_img("test", 6, 10) Bilder 1 bis 5 Formular das Testalbum aufrufen zurückgegeben werden.

Mein JavaScript-Code

function return_img(album, start, end) { 
    vars = "album" + album + "&start=" + start + "&end=" + end; 
    _("out").innerHTML = ""; 

    var request = new XMLHttpRequest(); 
    request.open("POST", "gallery_return_img.php", true); 
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    request.onreadystatechange = function() { 
     if (request.readyState === 4 && request.status === 200) { 
      var returned = request.responseText; 
      returned = JSON.parse(returned); 
      for (i = 0; i < Object.keys(returned).length; i++) { 
       x = document.createElement("div"); 
       y = document.createElement("img"); 
       y.setAttribute("src", returned[i].url); 
       x.appendChild(y); 
       document.getElementById("out").appendChild(x); 
      } 
     } 
    }; 
    request.send(vars); 
} 

Mein PHP-Code

if (key_exists('album', $_POST) && key_exists('start', $_POST) && key_exists('end', $_POST)) { 
    $album = $_POST['album']; 
    $start = $_POST['start']; 
    $end = $_POST['end']; 
    $render = json_decode(file_get_contents("/gallery_images/$album/info.pics")); 
    $total = count($render); 
    if($end > $total){ 
     $end = $total; 
    } 
    $pictures = []; 
    for($start; $start <= $end; $start++) { 
     array_push($pictures, $render[$start]); 
    } 
} 

Die info.pics-Datei enthält eine JSON codierte Liste der URLs und Bildnamen müssen die Bilder in diesem Album machen.

+0

Willkommen bei Super User! Bitte beachten Sie, dass Programmierprobleme am [so] gestellt werden sollten. Weitere Informationen zu unserer Website finden Sie in unserer [Tour]. –

+1

'keine Bilder zurückgegeben '- überprüfen Sie die Browser ** Entwickler ** Tools-Konsole, um zu überprüfen, was die Anfrage zurückgibt - Hinweis: Ihr PHP-Code sieht aus wie es nie etwas sendet, da es keine Ausgabe von diesem Code gibt –

+0

Ich vermute (Es ist schwer zu sagen aus dem Code, den Sie gepostet haben), dass das serverseitige Element ein wenig zur Verarbeitung benötigt und es scheint einfach, dass es die vorherige Anfrage aufgrund der Verzögerung verarbeitet. Als @JaromandaX sollte dein Netzwerk Tab dies offensichtlich machen. – Liam

Antwort

-1

Die Hälfte stolperte über das Problem nach dem erneuten Lesen der XMLHttpRequest() - Syntax.

Asynchron ist auf wahr gesetzt.

request.open("POST", "gallery_return_img.php", true); 

Ich stelle es auf falsch und kein Problem mehr.

Nicht ganz verstehen, warum dies einen Unterschied macht, aber es funktioniert.

Verwandte Themen