ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如果德语在JQuery中没有$.getJSON,则用英语保存维基百科文本

2019-07-06 05:33:33  阅读:141  来源: 互联网

标签:jquery javascript getjson


我得到一个特定关键字(var title)的德语文本,然后输出为html.这工作正常,但是如果德语文本不可用,我现在想加载英文文本.这也适用于我的代码:

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);
    });
});

但在第二个$.getJSON关闭后,文本再次为空.这意味着

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

正在工作并在控制台中输出正确的英文文本,但在关闭$.getJSON之后,变量文本不再具有任何值,我可以通过控制台中的输出确认:

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

我该如何保持价值?还有一种更好的方法来检查我想要获得的特定内容(本例中的文本)是否可用,所以我不必发出两个$.getJSON请求?或者我的方式是正确的方式吗?

编辑:它现在正在工作!

我找到了解决方案,感谢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.');
            }
        }

解决方法:

你正在运行异步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);

在分配文本之前立即调用,因为这是执行的进展.如果你把你想要做的事情的代码放在回调函数中,你就会得到你想要的结果.

标签:jquery,javascript,getjson
来源: https://codeday.me/bug/20190706/1394524.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有