我通过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");
答案 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
的位置