Wenn ich meine Seite lade, versuche ich, Werte aus meiner Datenbank mit AJAX in ein JS-Array einzufügen und danach einen zufälligen Wert zu erhalten.

var arrayen = [];
$.ajax({
	type: 'POST',
	url: 'getEnglishWords.php',
	success: function(words){
		words = JSON.parse(words);
		for(var i = 0; i < 50; i++) {
			arrayen.push(words[i].en);
		}
	},error: (error) => {
		 console.log(JSON.stringify(error));
	}
});

console.log(arrayen.length);

Wenn ich die Seite starte, werden die Werte in das Array eingefügt (ich habe die Chrome-Konsole überprüft), aber - das console.log, das ich im unteren Druck 0 hinzugefügt habe. Es sieht aus wie das console.log, das vor dem ausgeführt wird AJAX läuft und macht das Problem.

Bearbeiten: Ich versuche, das arrayen[12] in ein eigenes Array aufzuteilen. Es bedeutet, dass sich jeder Charakter in einer Array-Zeile befindet. also mache ich das:

console.log(arrayen);
var array = arrayen[12].split('');

Ergebnisse: Bildbeschreibung hier eingeben

Und ich habe Fehler bekommen: Cannot read property 'split' of undefined

1
Dasmond 18 Jän. 2019 im 08:40

5 Antworten

Beste Antwort

Die Erfolgsfunktion in ajax ist eine Funktion, die ausgeführt wird, wenn die Anforderung erfolgreich ist. Wenn Sie also Ihre Erfolgsergebnisse protokollieren möchten, fügen Sie das console.log wie folgt in Ihre Erfolgsfunktion ein:

$.ajax({
type: 'POST',
url: 'getEnglishWords.php',
success: function(words){
    words = JSON.parse(words);
    for(var i = 0; i < 50; i++) {
        arrayen.push(words[i].en);
    }
    console.log(arrayen.length);

},error: (error) => {
     console.log(JSON.stringify(error));
}
});
1
Red Bottle 18 Jän. 2019 im 05:51

Dieses Verhalten ist darauf zurückzuführen, dass Sie asynchronous function verwenden, also $.ajax(). Aus diesem Grund wird Ihre console.log(arrayen.length) -Anweisung zuerst ausgeführt, dann erhalten Sie die Daten.

Um Ihr Programm auszuführen, fügen Sie console statement in success callback hinzu. Es wird sichergestellt, dass die Länge gedruckt wird, sobald Sie die Daten vom Server erhalten.

Was ist Ajax?

1
vijayscode 18 Jän. 2019 im 05:54
var arrayen = [];
$.ajax({
    type: 'POST',
    url: 'getEnglishWords.php',
    success: function(words){
        words = JSON.parse(words);
        for(var i = 0; i < 50; i++) {
            arrayen.push(words[i].en);
        }
    findArrayLength(arrayen);
    },error: (error) => {
         console.log(JSON.stringify(error));
    }
});

function findArrayLength(x) {
console.log(x.length);
}

AJAX ist asynchron und blockiert den Browser nicht. Wenn Sie eine Ajax-Anfrage auslösen, kann der Benutzer weiterhin arbeiten, während die Anfrage auf eine Antwort wartet. Wenn der Server die Antwort zurückgibt, wird ein Rückruf ausgeführt, um sie zu verarbeiten.

Sie können die XMLHttpRequest synchronisieren, wenn Sie möchten, und wenn Sie dies tun, wird der Browser gesperrt, während die Anforderung aussteht (daher ist dies meistens unangemessen).

0
Sayed Mohd Ali 18 Jän. 2019 im 05:57

Verwenden Sie jede Funktion der jquery-Bibliothek.

$.each(words, function(index, value) {
    arrayen.push(value);
});
0
suneeth 18 Jän. 2019 im 06:15

Legen Sie Ihr console.log(arrayen.length); wie unten beschrieben ein.

    var arrayen = [];
    $.ajax({
        type: 'POST',
        url: 'getEnglishWords.php',
        success: function(words){
            words = JSON.parse(words);
            for(var i = 0; i < 50; i++) {
                arrayen.push(words[i].en);
            }
        },error: (error) => {
             console.log(JSON.stringify(error));
        }
    }).done(function(results) {
        console.log("done : " + arrayen.length);           
});
0
Shree 18 Jän. 2019 im 05:49