Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中JSON的问题_Javascript_Ajax_Json - Fatal编程技术网

JavaScript中JSON的问题

JavaScript中JSON的问题,javascript,ajax,json,Javascript,Ajax,Json,我有点奇怪,找不出是什么引起的。 我定义了一个全局数组变量,tmpMs。我使用AJAX和JSON.parse来填充它,这很有效: function LoadMobs(dung){ var xhr; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { xhr = new ActiveXObject("Msxml

我有点奇怪,找不出是什么引起的。 我定义了一个全局数组变量,
tmpMs
。我使用AJAX和
JSON.parse
来填充它,这很有效:

function LoadMobs(dung){

    var xhr;
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        xhr = new ActiveXObject("Msxml2.XMLHTTP");
    } else {
        throw new Error("Ajax is not supported by this browser");
    }

    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            if (xhr.status == 200 && xhr.status < 300) {
                // get mobs from PHP
                setTempMobs(JSON.parse(xhr.responseText));
                alert(tmpMs[0].NAME);
            }
        }
    }

    xhr.open('POST', 'loadmobs.php');
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send("dung=" + dung);

}
AJAX中的警报功能可以工作并显示mob的名称。不足为奇

但是,如果我想访问LoadMobs函数后面的“tmpMs”变量,它会说“无法访问未定义的属性0”


任何想法都将不胜感激。也许我应该提到,所有这些都是在某个画布重画间隔内发生的。

任何使用回调结果的东西都必须在该回调内。之后就不会了。在…内另外,当你仔细检查
ActiveXObject
的使用情况,然后盲目使用
JSON.parse
而不检查是否支持时,我是唯一质疑你基本技能的人吗?
LoadMobs
是异步的,不会阻塞。调用它,启动AJAX请求,然后发出警报(tmpMs[0].NAME)在AJAX请求实际完成之前执行。@jiribrek-前半部分。。。说得好,不幸的是,你后来堕落到了尼特的水平之下
function setTempMobs(mss){    
    tmpMs = mss;
}
LoadMobs(currDungBgIndex);
alert(tmpMs[0].NAME);