• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Rückgabewert in $.each?

Chronos

Aktives Mitglied
Hallo Forum,

ich brauche einen zufälligen Artikel von Wikipedia, bzw. nur den Titel.
Dazu habe ich folgenden Code gefunden:
Code:
var wikiUrl = 'http://en.wikipedia.org/w/api.php?action=query&generator=random&grnnamespace=0&prop=extracts&exchars=500&format=json';

function getRandomArticle() {
    $.getJSON(wikiUrl, function(data) {
        $.each(data.query.pages, function(i, item) {               
            console.log(item.title);          
        });
    });
}

Ich will den Artikel aber noch in anderen Funktionen verwenden und wusste jetzt nicht so wirklich wie ich das in $.each tue...

gelöst hab ich das jetzt erst mal so:
Code:
function returnArticle(article){
    console.log(article);
};
   
function getRandomArticle() {
    $.getJSON(wikiUrl, function(data) {
        $.each(data.query.pages, function(i, item) {               
             returnArticle(item.title);          
        });
    });
}

Ich mein dann kann ich es zwar in der Konsole ausgeben aber so richtig ist das ja nicht?
Ich mein in returnArticle müsste es doch eher return article; heißen?

Ich bin verwirrt ^^ kann mir jemand helfen?
 
Werbung:
Hallo Forum,

ich brauche einen zufälligen Artikel von Wikipedia, bzw. nur den Titel.
Dazu habe ich folgenden Code gefunden:
Code:
var wikiUrl = 'http://en.wikipedia.org/w/api.php?action=query&generator=random&grnnamespace=0&prop=extracts&exchars=500&format=json';

function getRandomArticle() {
    $.getJSON(wikiUrl, function(data) {
        $.each(data.query.pages, function(i, item) {            
            console.log(item.title);       
        });
    });
}

Ich will den Artikel aber noch in anderen Funktionen verwenden und wusste jetzt nicht so wirklich wie ich das in $.each tue...

gelöst hab ich das jetzt erst mal so:
Code:
function returnArticle(article){
    console.log(article);
};

function getRandomArticle() {
    $.getJSON(wikiUrl, function(data) {
        $.each(data.query.pages, function(i, item) {            
             returnArticle(item.title);       
        });
    });
}

Ich mein dann kann ich es zwar in der Konsole ausgeben aber so richtig ist das ja nicht?
Ich mein in returnArticle müsste es doch eher return article; heißen?

Ich bin verwirrt ^^ kann mir jemand helfen?

Also so ganz verstehe ich das nicht...

Aber da das ganze ja asynchron läuft, müsstest du das so machen:

Code:
function loadRandomArticleTitle(complete) {
    $.getJSON(wikiUrl, function(data) {
        $.each(data.query.pages, function(i, item) {             
           if(complete) complete(item.title);
           return;
        });
    });
}

loadRandomArticleTitle(function (title) {
    // ...
});

Du könntest stattdessen auch $.ajax({async:false}) verwenden, würde ich aber nicht machen.
 
Zuletzt bearbeitet:
Danke aber ich verstehe leider nicht was dein Code tun soll?
Also so ganz verstehe ich das nicht...

Aber da das ganze ja asynchron läuft, müsstest du das so machen:

Hm ich verstehe eher deinen Code noch nicht :D so in der Form kenne ich das noch gar nicht.
Was macht denn da was?

Code:
function loadRandomArticleTitle(complete) {
     $.getJSON(wikiUrl, function(data) {
         $.each(data.query.pages, function(i, item) {           
           if(complete) complete(item.title);
           return;
        });
    });
}

Was ist denn complete, muss ja ein Boolean sein, und der ist aller Wahrscheinlichkeit nach irgendwann true und bekommt den werd aus item.title, wenn es diesen hat wird die Funktion über return verlassen, soweit richtig?

Aber was macht denn jetzt dann:
Code:
loadRandomArticleTitle(function(title) {
    console.log(title);
});

woher kommt denn jetzt function(title) und woher nimmt es title?

Was ich möchte ist eigentlich nur eine Funktion die mir den Title des Wiki-Artikels gibt.

Also quasi sowas wie
Code:
loadRandomArticleTitle(function(title) {
    return title;
});
// und dann z.B.
function returnValue(){
    console.log(loadRandomArticleTitle....);
};

Wie benutze ich das denn?
Ich brauche ja title irgendwie von außen zugänglich, so richtig verstehen tu ich es nicht sorry :(
 
Werbung:
Der asynchrone Request liefert mit data ein Promise-Object zurück, das nur innerhalb des Callbacks existiert. Mach es dir doch einfach und rufe deine Funktion von dort aus auf, anstatt etwas returnen zu wollen.

Also nicht von innen nach außen, sondern von außen nach innen.
 
Zurück
Oben