2016-12-15 4 views
0

Ich verwende Ajax, um Informationen an einen Server zu senden und eine JSON-Zeichenfolge zurückzugeben. Dies ist der Code ich verwende:Ajax-Aufruf fehlgeschlagen

function getRequests(folder, mode) { 
xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = singleBook(folder, mode); 
xhr.open("GET", "bestreads.php?mode=" + mode + "&title=" + folder, true); 
xhr.send(null); 
} 

function singleBook(folder, mode) { 
alert(xhr.responseText); 
if (mode == "info") { 
    var json = JSON.parse(xhr.responseText); 
} 
} 

Ich habe meinen PHP-Skript getestet und ich bin 100% sicher, dass es richtig den richtigen JSON-String für jeden möglichen Ordnernamen druckt. Ich habe die JSON-Zeichenfolge validiert, die erstellt wird, um dies zu bestätigen. Dieser Code lässt jedoch xhr vollständig leer. Ich habe versucht, den Status mit xhr.stats zu überprüfen, aber es gibt 0 zurück, was für mich keinen Sinn ergibt, da ich 404 oder 200 zurückgeben sollte.

Dies ist ein Schulprojekt, und ich darf nicht benutze JQuery, also brauche ich eine Lösung, die es nicht benutzt. Ich mache einen Ajax-Aufruf früher in meinem Aufruf auf die gleiche Weise und es funktioniert ohne irgendwelche Probleme, aber gibt eine XML-Zeichenfolge anstelle von JSON zurück, was mich denken lässt, dass ich etwas anderes tun muss, um die JSON-Zeichenfolge zurückzugeben, aber ich habe keine Ahnung, was das ist könnte sein.

PHP-Code:

function createJson($folder) { 
$path = "books/" . $folder . "/info.txt"; 
$infoFile = file($path); 
$info = '{"title":"' . $infoFile[0] . '","author":"' . $infoFile[1] . '","stars":"' . $infoFile[2] . '"}'; 
print $info; 
} 
+0

zeigen Sie Ihren 'bestreads.php' Code. – Naga

Antwort

2

Sie benötigen eine Funktion Verweis auf onreadystatechange zuweisen Sie stattdessen die singleBook Funktion aufrufen und den Wert zuweisen, indem das zu onreadystatechange zurückgegeben.

müssen auch für die Ajax-Anforderung warten, bevor die Verarbeitung es

function getRequests(folder, mode) { 
 
    var xhr = new XMLHttpRequest(); 
 
    xhr.onreadystatechange = singleBook(xhr, folder, mode); 
 
    xhr.open("GET", "bestreads.php?mode=" + mode + "&title=" + folder, true); 
 
    xhr.send(null); 
 
} 
 

 
function singleBook(xhr, folder, mode) { 
 
    return function() { 
 
    if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { 
 
     console.log(xhr.responseText); 
 
     if (mode == "info") { 
 
     var json = JSON.parse(xhr.responseText); 
 
     } 
 
    } 
 
    } 
 
}

+0

Dies gibt die JSON-Zeichenfolge zurück, aber aus irgendeinem Grund gibt es auch einen Kommentar zurück, den ich außerhalb des PHP-Codes habe. Weißt du warum das so ist? – TheBandit

+0

In modernen Browsern verwenden Sie 'xhr.addEventListener ('load', singleBook)' ist ästhetischer und lesbarer. – kcats

+0

@TheBandit Wenn dieser Kommentar außerhalb Ihres PHP-Codes liegt, handelt es sich um einfachen Text. Nur Text == Ausgabe. Jede Ausgabe wird zurückgegeben. – icecub

Verwandte Themen