Save Wikipedia text in English if German is not available with $ .getJSON in jQuery

I get the German text of a specific keyword ( var title) and print it as html afterwards. This works fine, but now I wanted to download English text if German text is not available. This also works fine with my code:

var length = 500;
var title = $('#title').attr('data-title');
var lang = 'de';
var url = 'https://' + lang + '.wikipedia.org/w/api.php?format=json&action=query' +
    '&prop=extracts&exintro=&explaintext=&titles=' + title + '&redirects=0';

$.getJSON("http://query.yahooapis.com/v1/public/yql",
{
    q: "select * from json where url=\"" + url + "\"",
    format: "json"
},
function (data) {
    $.each(data.query.results.json.query.pages, function (key, val) {
        var text = val['extract'];
        console.log('lang-' + lang + '-text: ' + text);
        if (text) {
            text = text.replace('Siehe auch:', '');
        } else if (!text && lang != 'en') {
        var url = 'https://en.wikipedia.org/w/api.php?format=json&action=query' +
        '&prop=extracts&exintro=&explaintext=&titles=' + title + '&redirects=0';
        $.getJSON("http://query.yahooapis.com/v1/public/yql",
            {
                q: "select * from json where url=\"" + url + "\"",
                format: "json"
            },
            function (data) {
                $.each(data.query.results.json.query.pages, function (key, val) {
                text = val['extract'];
                console.log('lang-en-text: ' + text);
                });
            });
        }
        console.log('lang-end-text: ' + text);

        if (text) {
            text = text.length > length ? text.substring(0, length - 3) + '...' : text;
            $('#text').html(text);
        } else {
            setTimeout(function () {
                $('#text').html('<?= __('EMPTY'); ?>');
            }, 1000);
        }

        console.log(data);
    });
});

But after closing the second, $ .getJSON textis empty again. It means that

console.log ('lang-en-text:' + text);

it works and displays the correct English text in the console, but after closing $ .getJSON the variable textno longer matters, which I can confirm with the output in the console:

console.log ('lang-end-text:' + text);

? , , ( ) , $.getJSON? - ?

EDIT: !

moopet .done .setText . , , , , . :

var length = 500;
var title = $('#title').attr('data-title');
var lang = 'de';
var url = 'https://' + lang + '.wikipedia.org/w/api.php?format=json&action=query' +
    '&prop=extracts&exintro=&explaintext=&titles=' + title + '&redirects=0';

    $.getJSON("http://query.yahooapis.com/v1/public/yql",
    {
        q: "select * from json where url=\"" + url + "\"",
        format: "json"
    },
        function (data) {
            $.each(data.query.results.json.query.pages, function (key, val) {
                var text = val['extract'];
                console.log('lang-' + lang + '-text: ' + text);
                if (text) {
                    text = text.replace('Siehe auch:', '');
                } else if (!text && lang != 'en') {
                var url = 'https://en.wikipedia.org/w/api.php?format=json&action=query' +
                '&prop=extracts&exintro=&explaintext=&titles=' + title + '&redirects=0';
                $.getJSON("http://query.yahooapis.com/v1/public/yql",
                    {
                        q: "select * from json where url=\"" + url + "\"",
                        format: "json"
                    },
                    function (data) {
                        $.each(data.query.results.json.query.pages, function (key, val) {
                        text = val['extract'];
                        console.log('lang-en-text: ' + text);
                        });
                    }).done(function() {
                        setText(text);
                    });
                }
                console.log(data);
            });
        }).done(function() {
            setText(text);
        });

        function setText(text) {
            if (text) {
                text = text.length > length ? text.substring(0, length - 3) + '...' : text;
                $('#text').html(text);
            } else {
                $('#text').html('Text not available.');
            }
        }
+4
1

javascript.

:

function (data) {
    $.each(data.query.results.json.query.pages, function (key, val) {
        text = val['extract'];
        console.log('lang-en-text: ' + text);
    });
});

. , HTTP-.

console.log('lang-end-text: ' + text);

, , . , , .

+1

Source: https://habr.com/ru/post/1649531/


All Articles