如何使用javascript处理api.php的结果?

时间:2014-01-29 02:55:29

标签: javascript jquery mediawiki wiki mediawiki-api

我四处寻找,似乎无法找到我正在寻找的东西。

如何在javascript中使用api.php?action=query&list=allusers&augroup=sysop&aulimit=max&format=json的结果?

我要做的是创建一个脚本来简单地改变维基上用户名的颜色,如果它们在某些组中,如sysop,官僚等等。

虽然我通常很擅长弄清楚这些事情,但我整天都在努力工作,而我却无处可去。任何人都可以帮我解决一些例子或事情吗?如果可以使用大多数jQuery来完成它。

提前致谢。


编辑:(回应ahren的评论):

我开始尝试清理并修改其他人编写的脚本以添加更多功能/使其按预期工作,但我无法理解它:

/* HighlightUsers by Bobogoobo
 * Changes color of links to specified groups and users
 * TODO: redo but much better (recursive would be easier - I've learned a lot since I wrote this thing)
 */
function highlightUsers () {
    "use strict";
    var highlight = window.highlight || {}, selector = '', that, userstr,
        indices = [],
        i = 0,
        user,
        ns,
        x,
        y;

    for (ns in mw.config.get('wgNamespaceIds')) {
        if (i === 4) {
            userstr = ns;
        }
        i++;
    }
    userstr = userstr.charAt(0).toUpperCase() + userstr.substring(1);

    if (highlight['selectAll']) {
        selector = 'a[href$=":';
    } else {
        selector = 'a[href="/wiki/' + userstr + ':';
    }

    for (y in highlight) {
        indices.push(y);
    }

    for (x in highlight) {
        that = highlight[x];

        if (x === 'selectAll') {
            continue;
        } else if (x === 'users') {
            for (user in that) {
                $(selector + user.replace(/ /g, '_') + '"]').css({
                    'color': that[user],
                    'font-weight': 'bold'
                }).attr('data-highlight-index',
                    $.inArray('users', indices));
            }
        } else {
            (function (userColor, userGroup) { //JavaScript doesn't like to cooperate with me
                $.getJSON('/api.php?action=query&list=allusers&augroup=' + userGroup +
                    '&aulimit=max&format=json', function (data) {
                        var stuff = data.query.allusers, //, select = '';
                            user;

                        for (user in stuff) {
                            //select += selector + stuff[user].name.replace(/ /g, '_') + '"], ';
                            $(selector + stuff[user].name.replace(/ /g, '_') + '"]').each(function () {
                                if (($(this).attr('data-highlight-index') || -1) < $.inArray(userGroup, indices)) {
                                    $(this).attr('data-highlight-index', $.inArray(userGroup, indices));
                                    $(this).css({
                                        'color': userColor,
                                        'font-weight': 'bold'
                                    });
                                }
                            });
                        }
                        //select = select.substring(0, select.length - 2);
                        //$(select).css('color', userColor);
                    });
            }(that, x));
        }
    }
}

这是我最新的草稿,我设法完成了一些事情,比如使名称变粗,并纠正语法错误,但我已经决定从头开始而不是试图理解其他人的代码可能会更好

2 个答案:

答案 0 :(得分:0)

我更喜欢使用jQuery AJAX功能。

用法很简单:

$.ajax({   
 url : 'api.php',   
 type : 'post',  
 datatype : 'json',   
 data : {
   'list' : allusers,
   'augroup' : 'sysop'   
 }, 
  success : function(success_record) {    
    //here you can do Js dom related modifications like changing color etc.
    // after php(server side) completes 
  } 
});

答案 1 :(得分:0)

我尝试了Markrand描述的AJAX解决方案,但不幸的是我无法让它工作。首先我得到“allusers未定义”,所以我将它包装在引号中以便它不被视为var,然后我不得不将'api.php'更改为'/api.php',因为它是成为'/wiki/api.php',它不存在,并添加斜杠使它使用基本URL。然后它会执行并返回一个对象,但是在我可以使用的对象中没有任何用处(例如用户名数组),它给我的只是API文档...所以我最终做了这样的事情:< / p>

function highlightAdmins() {
    $.getJSON('/api.php?action=query&list=allusers&augroup=sysop&aulimit=max&format=json',
        function(data) {
            for (var i = 0; i < data.query.allusers.length; i++) {
                $('a[href$="User:' + data.query.allusers[i].name + '"]').css('color', '#FF6347');
            }
        });
}

这给了我一个包含查询结果的对象,在本例中是一个sysop用户名(data.query.allusers[i].name)数组,我可以迭代它并执行操作。