我似乎无法正确接收我的JSON对象

时间:2011-12-15 17:05:48

标签: javascript ajax

对于措辞严厉的标题,我很抱歉,如果我的解释很黯淡,我还要提前道歉。我对JavaScript和Ajax的了解并不是那么好。

无论如何,所以,我想要做的是使用PHP显示项目列表,然后当点击一个项目时,将显示一个弹出窗口,基本上询问用户是否想要将项目添加到数据库(它是基本上从一个DB导入到另一个DB)。部分弹出窗口是一个下拉列表,其中包含导入项目的可能父项。 (因此,如果要导入名为Vista的项目,则可以将其放在父类别“OS”中)。

为了生成下拉列表,必须发出ajax请求,并且后端PHP使用JSON对象进行回复,该对象包含下拉列表中需要包含的所有元素。

因此,作为测试AJAX连接是否有效的测试,我只是随意在窗口上放置一个按钮,如下所示:

<div align="center" onclick="test()">TEST BUTTON </div>  

并有一个名为test的JS函数:

function test(){
    var url = "index.php?module=getlist";
    //Code to send post request with a callback to function test2();
}

和函数test2():

function test2(data){
    if (data){
        alert(data.Project[0].id);
    }
    else {
        alert("ERROR");
    }
}

注意:PHP代码返回一个JSON对象,其中一个子对象物称为Project,它是一个关联数组,其中包含id和name等字段。

以上作品。警告框显示与项目ID对应的数字。

但是,我们希望有一个包含列表的弹出窗口!所以,我们得到一些像这样的HTML:

<td align="center" onclick="collection('Random_Name', 'Random_Description')">Project 1</td>

注意:我将项名称和描述的值传递给名为collection的JS函数。

function collection(name, description){
    test();
    //Stuff that creates the popup, creates a form in the popup, and populates the form  with default values(name and description).
    // Following Stuff is used to make the drop down.
    var tempdata = new Array(new Array());
    tempdata[0]['name'] = json.Project[0].name;
    tempdata[0]['value'] = json.Project[0].id;
    //This function creates the Select list, it requires a name, default value, and
    //a multi-dimensional array like the one defined above.
    var pacolist = createSelect("collection_list",'',tempdata)  
    //Append the elements together and add a save button.
}

为了尝试让它工作,我在页面顶部声明了一个名为json的全局变量。我将test2()中的alert(data.Project[0].id);更改为json = data; 但是,它没有用。

单击打开弹出窗口时出现Uncaught TypeError: Cannot read property 'Project' of undefined错误。

我将test2()方法更改为:

function test2(data){
      if(data){
          return data
      }
      else{
          //Code from the original test() function to send post request to PHP with
          //a callback to test2.
      }

collection()函数中,我添加了这个:var json = test2,(没有全局json),但这也不起作用。

很抱歉这个冗长的问题,但基本上,我打开一个函数,该函数需要调用另一个发送post请求的函数,并且请求接收的数据需要由原始函数使用。我该怎么做呢?

我认为这只是时间问题。因为请求需要一段时间,同时原始功能已经开始了。

编辑:找到解决方案。我认为这是一个时间问题。为了解决它。我使页面html调用一个函数,将名称和描述存储为全局变量。然后,此函数使用对不同函数的回调发出post请求。然后,这个不同的函数使用它收到的数据(JSON对象),并将它与全局名称和描述一起传递给前面提到的collection()函数。

1 个答案:

答案 0 :(得分:1)

您必须在使用之前解析数据。

//For IE6/IE7
var data = eval('(' + json + ')');

//For IE8+/Chrome/Firefox...
var data = JSON.parse(json);