json / ajax混乱

时间:2012-03-08 16:46:45

标签: ajax json

我收到了回复整个表格的回复。 N行,每行有7个单元格。所以我最终得到了nX7的回复。显然,我应该使用JSON来适当地处理字符串。我已经找到了关于如何创建JSON对象的教程,但没有关于如何通过ajax发送它以及如何通过ajax发送它,jsp知道用响应填充JSON对象......换句话说,

  1. 我在javascript(check)
  2. 中创建JSON对象
  3. 将JSON对象放在ajax代码中(混淆)
  4. 响应JSON对象填充(混乱)
  5. 解析JSON对象,这样我就可以轻松获取数据(可能会混淆,我们会在步骤2/3之后看到)
  6. 我没有使用jquery,因为我还在学习,而jquery的语法目前令人困惑。

    var sweekStart = document.getElementById("weekStart").value;
    var smonth = document.getElementById("month").value;
    var syear = document.getElementById("year").value;      
    
    var xmlhttp;
    if (window.XMLHttpRequest)  
         {// code for IE7+, Firefox, Chrome, Opera, Safari
           xmlhttp=new XMLHttpRequest();  
         } 
         else
          {// code for IE6, IE5
           xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }  
    
    var url = "empTableRepop.jsp?weekStart=" + encodeURIComponent(sweekStart)+"&month="+encodeURIComponent(smonth)+"&year="+encodeURIComponent(syear);
    xmlhttp.open("POST",url,true);
    //alert("made it to open");
    xmlhttp.onreadystatechange = function(){
            if(xmlhttp.readyState == 4){             
                //alert(xmlhttp.responseText);
                var test = xmlhttp.responseText;            
                reFillTable(test);  
    
    
            }
        }       
    
    xmlhttp.send(null);
    

    变量“test”(是的,坏名称但它是临时的)是我想要从标准var转换为JSONobject的对象。如果我理解正确,JSON在收到响应时已经解析了字符串。我意识到我可以将“function()”更改为直接“reFillTable(test)”,但是考虑到它让我开始工作的路径,我最终以某种方式结束了大声笑。一旦一切正常,将会修复。

    编辑:

    这是我“显示”来自jsp / java文件的信息的方式。

    //Name Cell
            out.println(empName);           
    
            //Mondays Hours
            out.println(hoursArr[0]);           
    
            //Tuesdays Hours
            out.println(hoursArr[1]);               
    
            //Wednesdays Hours
            out.println(hoursArr[2]);   
    
            //Thursdays Hours
          out.println(hoursArr[3]); 
    
            //Fridays Hours
            out.println(hoursArr[4]);           
    
            //Total hours Cell
            out.println(PTOAmt);
    

1 个答案:

答案 0 :(得分:0)

假设您的serverresponse已经在工作,这将为您提供收到的JSON中的JavaScript对象。

var test = JSON.parse( xmlhttp.responseText );

澄清:JavaScript中没有明确的“JSONObject”。 JSON代表JavaScript Object Notation,它只是编写普通JavaScript对象的简写。然而,它变得流行,作为通过AJAX请求发送数据的方法。

最后,服务器只发送一个JSON格式的字符串,另一方面,你必须再次解析(JSON.parse()),以便有一个表示数据发送的对象。


添加:JSON.stringify()是另一个方向的操作。用JavaScript对象创建一个字符串。


关于编辑:

正如评论中所述,这不会创建有效的JSON(请查看@ json.org以获取概述)。

所以现在你有了一些选择:

  1. 使用GSON等库对您的数据进行编码。

  2. 在JavaScript中手动解析数据。 (我不推荐这个。)

  3. 手动创建有效的JSON字符串。

  4. 第三个选项的代码可能如下所示:

    // start the JSON object
    out.print( "{" );
    
    //Name Cell
    out.println( "\"empName\":\"" + empName + "\"," );
    
    // start an array for the next few values
    out.print( "\"hours\": [" );
    
    out.print(hoursArr[0] + "," );
    out.print(hoursArr[1] + "," );
    out.print(hoursArr[2] + "," );
    out.print(hoursArr[3] + "," );
    out.print(hoursArr[4] + "," );
    
    // end the array
    out.print( "]," );        
    
    //Total hours Cell
    out.print( "\"PTOAmt\":\"" + PTOAmt + "\"");
    
    // end the JSON
    out.print( "}" );
    

    这假设PTOAmt也是一个字符串。

    从长远来看,您应该使用选项(1)中提到的库来处理编码。