-1

我通过 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);       
}

如果我将最后两个语句也更改为以下语句,则会收到 null 错误

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

服务代码

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

2 回答 2

1

您将无法从 POST 正文中读取 JSON getParameter,请参阅获取 POST 数据

要在参数中获取 json,我认为您只是忘记了dmime 类型的末尾。你有"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);
于 2013-05-07T20:41:41.517 回答
0

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

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

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

如果您仍想使用表单,那么超级简单的方法是:

<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 对象

于 2013-05-07T20:41:56.530 回答