servlet中的null JSON

时间:2013-05-07 20:17:38

标签: javascript ajax json servlets

我通过AJAX发送JSOn,并在servlet中发送null

JAVASCRIPT

创建JSON的函数

  function submitTheValues(event, id, price, count) {
    var searchEleWithinDiv = document.getElementById("content").children;
    var table = searchEleWithinDiv[1];
    var qty = table.rows[count].cells[8].children[0].value;
    var acNo = table.rows[count].cells[10].children[0].value;
   var jsonStr = '{"reagentid": id, "account": acNo,"quantity":           
     qty, "reagentcount":count}';      
    var jsonObj = eval("(" + jsonStr + ")");
    return jsonObj;
  }

AJAX代码        var xmlhttp = new XMLHttpRequest(); ;

    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            if(xmlhttp.responseText !=null) 
            {
                var searchEleWithinDiv = document.getElementById("content").children;
                var table = searchEleWithinDiv[1];
                var btn = table.rows[count].cells[11].children[0].value;
                btn.value = "Added to Cart";
            }
        }
    }
    var url = "<%=request.getContextPath()%>/displaycartservlet";
    var jsonObj = this.submitTheValues(event, id, price, count);
    var jsonOb = JSON.stringify(jsonObj);


     xmlhttp.open("POST", url, true);
     xmlhttp.setRequestHeader("Content-type", "application/json");
     xmlhttp.send(jsonOb);       
}

如果我还将最后两个语句更改为以下语句,则会出现空错误

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencode");                    
xmlhttp.send('json='+encodeURIComponent(jsonOb));

服务代码

     String jsonPar = request.getParameter("json");

2 个答案:

答案 0 :(得分:1)

您无法使用getParameter从POST正文中读取JSON,请参阅get POST data

要在参数中获取json,我想你只是忘记了mime类型末尾的d。 你有"application/x-www-form-urlencode"

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send('json='+encodeURIComponent(jsonOb));

此外,您可以使用eval清除一些不是真正需要的代码。 只需直接创建对象:

function submitTheValues(event, id, price, count) {
    var searchEleWithinDiv = document.getElementById("content").children;
    var table = searchEleWithinDiv[1];
    var qty = table.rows[count].cells[8].children[0].value;
    var acNo = table.rows[count].cells[10].children[0].value;
    return {
        reagentid: id,
        account: acNo,
        quanitity: qty,
        reagentcount: count
    };
}

然后清理这里的名字:

var url = "<%=request.getContextPath()%>/displaycartservlet";
var obj = this.submitTheValues(event, id, price, count);
var jsonObj = JSON.stringify(obj);

答案 1 :(得分:0)

检查XMLHttpRequest send method,如果你想使用x-www-form-urlencode,你会发现你需要边界参数。但是要发送一个简单的JSON字符串,你可以使用它:

    xmlhttp.setRequestHeader("Content-type", "application/json");    

并且应该可以工作(它在我的模块中)。

如果您仍想使用表单,那么SUPER EASY方式就是:

<form id="myform">
    <input name="text" type="text"/>
    <select name="month">
        <option name="ene">Enero</option>
        <option name="feb">Febrero</option>
    </select>
</form>
<script>
    var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function(){
        if(this.readyState == 4 && this.status == 200)
                alert(this.responseText);
    }

    xhr.open("POST", "server.php");//i use php, but you can change to your servlet here

    function send(){
        xhr.send(new FormData(document.getElementById('myform')));
    }

</script>

<button onclick="send()">Enviar</button>  

密钥使用FormData Object

的位置
相关问题