Javascript 成功填充xmlhttprequest的Json对象突然变为;空";

Javascript 成功填充xmlhttprequest的Json对象突然变为;空";,javascript,json,xmlhttprequest,Javascript,Json,Xmlhttprequest,“json_options”是一个全局变量,应该用XMLHttpRequest的responseText填充,它包含一个有效的json字符串: function getOptionsData() { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

“json_options”是一个全局变量,应该用XMLHttpRequest的responseText填充,它包含一个有效的json字符串:

function getOptionsData()
{
var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        json_options = JSON.parse(xmlhttp.responseText);

    }
}
xmlhttp.open("GET", "getData.php", true);
xmlhttp.send();
}
此时一切正常,json_选项包含一个有效的json对象

在函数“createOptionsTable”中调用函数“getOptionsData”:

函数createOptionsTable()
{
getOptionsData();
var元素=null;
对于(var i=0;i
当我想在此时访问“json_选项”时,它说它是空的,我不知道为什么

非常感谢您的帮助,提前感谢!

函数getOptionsData()
function createOptionsTable()
{
getOptionsData();
var element = null;

for(var i = 0; i < json_options.length; i++)
{
[...]
{ var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=函数() { if(xmlhttp.readyState==4&&xmlhttp.status==200) { json_options=json.parse(xmlhttp.responseText); 对于(var i=0;i

您的
for循环应该在您可以实际从ajax获得响应之后执行,而不是在
createOptionsTable()
中执行。

在您的代码中,
getOptionsData();
之后的代码在调用成功回调之前执行。因此,您将
json\u options
设置为null

像这样试试

function getOptionsData()
{
var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        json_options = JSON.parse(xmlhttp.responseText);
         for(var i = 0; i < json_options.length; i++)
        {
          [...]
        }
    }
}
xmlhttp.open("GET", "getData.php", true);
xmlhttp.send();
}
函数getOptionsData(回调) { var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=函数() { if(xmlhttp.readyState==4&&xmlhttp.status==200) { json_options=json.parse(xmlhttp.responseText); 回调(); } } open(“GET”,“getData.php”,true); xmlhttp.send(); } 函数createOptionsTable() { var callback=function() { var元素=null; 对于(var i=0;i
太好了!正是我要找的!谢谢!
function getOptionsData()
{
var xmlhttp = new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        json_options = JSON.parse(xmlhttp.responseText);
         for(var i = 0; i < json_options.length; i++)
        {
          [...]
        }
    }
}
xmlhttp.open("GET", "getData.php", true);
xmlhttp.send();
}
   function getOptionsData(callback)
   {
     var xmlhttp = new XMLHttpRequest();

     xmlhttp.onreadystatechange=function()
     {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
        {
           json_options = JSON.parse(xmlhttp.responseText);
           callback();

        }
     }
   xmlhttp.open("GET", "getData.php", true);
   xmlhttp.send();
 }


 function createOptionsTable()
 {
   var callback = function()
   {
        var element = null;
        for(var i = 0; i < json_options.length; i++)
        {
          [...]
         }
   }

   getOptionsData(callback);
}