weixin_33676492 2016-11-06 08:46 采纳率: 0%
浏览 234

javascript数组长度为1

I am using javascript for creating a filter. I am using ajax and collecting value. Ajax Request:

if(window.XMLHttpRequest)
{
vendreq=new XMLHttpRequest();
}
else
{
vendreq=new ActiveXObject("Microsoft.XMLHTTP");
}

vendreq.onreadystatechange=function () { 
 /*  if(b==0){
                document.getElementById("details2").innerHTML="Select GIT more than 0";
            } */
      if((vendreq.readyState==4) && (vendreq.status==200)) {
            venda= [];

            venda.push(vendreq.responseText);
            alert(venda.length);

   } }
vendreq.open("Get","Vendor","true");
vendreq.send();   
});

Servlet Vendor:

ResultSet rs =ps.executeQuery();    
                 while(rs.next()){
                 out.println(rs.getString("VNAME")+",");
                  out.println(rs.getString("VCODE")+",");
                 }

when I display i.e alert(venda) it displays multiple values. where as when I check for the array length , it shows one. Can any one tell me what is the reason for this?

filter:

<div class="optionsDiv2" style="display:inline;">     
    Filter by Vendor <select name="item" id="vendor">
        vendb=document.getElementsByName("venda");
     while(vendb.length) { 
     <option>vendb</option>

     }
        </select>
</div> 
  • 写回答

1条回答 默认 最新

  • weixin_33681778 2016-11-06 09:05
    关注

    As per I understand from your response text template, you are receiving values like:

    VNAME1,
    VCODE1,
    VNAME2,
    VCODE2,
    ...
    VNAME(N),
    VCODE(N),
    

    It would be great if you save result in an object and then return it in the form of json.

    It would look similar to:

    "VALUES":[{
        "VNAME": "VNAME1",
        "VCODE": "VCODE1"
    }, {
        "VNAME": "VNAME2",
        "VCODE": "VCODE2"
    },
    ... {
        "VNAME": "VNAME(N)",
        "VCODE": "VCODE(N)"
    }]
    

    Also for your current situation (As you are returning a plain string) I would suggest you to use a unique splitter for string to create an array

    out.println(rs.getString("VNAME")+",");
    out.println(rs.getString("VCODE")+"+++");
    

    So it'll return string as:

    VNAME1,
    VCODE1+++
    VNAME2,
    VCODE2+++
    

    Now remove venda= []; and instead of venda.push(vendreq.responseText); use venda = vendreq.responseText.split("+++"); That'll create an array of your returned string as "VNAME1,VCODE1","VNAME2,VCODE2"...

    And trust me its a bad implementation method. Use JSON instead.

    Added snippet for example:

    str="VNAME1,VCODE1+++VNAME2,VCODE2+++VNAME3,VCODE3+++";
    venda=str.split("+++");
    alert(venda.length-1 +" Values: "+venda);

    </div>
    
    评论

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)