【问题标题】:Ajax request: undefinedAjax 请求:未定义
【发布时间】:2025-12-10 02:00:01
【问题描述】:

您好,我想请求一个带有 ajax 的 api。 api有普通的json(我的想法) 现在我在 javascript 中设置了一个 ajax 请求,但我得到一个未定义的变量错误。我想我知道问题,但我还不知道答案。

<script type="text/javascript">
document.getElementById("button").addEventListener('click', loadUsers);


// Load Github USers

function loadUsers(){
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", "dontKnowtheUrl", true);


    xhr.onload = function()
                {

                        if(this.status == 200){

                            var stats = JSON.parse(this.responseText)
                            var output = "";
                            for(var i in stats){
                                output += 
                                '<div class="user">' +
                                '<ul>' +
                                '<li>p_level: '+stats[i].p_level+'</li>'+
                                '<li>p_currentmmr: '+stats[i].p_currentmmr+'</li>' +
                                '</ul>' +
                                '</div>';
                            }
                            document.getElementById("users").innerHTML = output;
                        }

                }


                xhr.send();
}

这是javascript部分 来自 api 的 json 文件看起来像这样

     {"results":
    [{"p_id":"test",
    "p_name":"test",
    "p_level":"test",
    "p_platform":"test",
    "p_user":"test",
    "p_currentmmr":"test",
    "p_currentrank":"test",
    "kd":"test"},
    {"p_id":"test",
    "p_name":"test",
    "p_level":"test",
    "p_platform":"test",
    "p_user":"test",
    "p_currentmmr":"test",
    "p_currentrank":"test",
    "kd":"test"}],
    "totalresults":2}

我的猜测是 json 文件不是普通数组,因为它包含 "results": 和 "totalresults" 属性。 有谁知道如何在不进入 json 文件的情况下修复它?

【问题讨论】:

    标签: javascript html json ajax request


    【解决方案1】:

    您将要循环遍历 stats.results 而不仅仅是统计信息,请参见以下示例:

    function loadUsers(){
        var xhr = new XMLHttpRequest(); 
        xhr.open("GET", "dontKnowtheUrl", true);
    
    
        xhr.onload = function()
                    {
    
                            if(this.status == 200){
    
                                var stats = JSON.parse(this.responseText)
                                var output = "";
                                for(var i in stats.results){
                                    var row = stats.results[i];
                                    output += 
                                    '<div class="user">' +
                                    '<ul>' +
                                    '<li>p_level: '+row.p_level+'</li>'+
                                    '<li>p_currentmmr: '+row.p_currentmmr+'</li>' +
                                    '</ul>' +
                                    '</div>';
                                }
                                document.getElementById("users").innerHTML = output;
                            }
    
                    }
    
    
                    xhr.send();
    }
    

    【讨论】:

    • 是的,您还必须更改“stats.results[i].p_level”之类的输出,并且不要让其他变量保持不变,谢谢
    • 你需要更新stats.results[i].p_level & stats.results[i].p_currentmmrJSFiddle
    • 更新了我的答案以修复它,感谢您发现!