2013-05-07 2 views
-1

Я посылаю JSON с помощью AJAX и его нуль в сервлетнулевой JSON в сервлет

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 код вар XMLHTTP = новый 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"); 

ответ

1

Вы не собираетесь быть в состоянии читать JSON с корпуса POST с помощью getParameter, см. get POST data

Чтобы получить json в параметре, я думаю, вы просто забыли d в конце типа mime. Вы были "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); 
+0

Это работало. Это было всего лишь в конце. Дурак я. – Raghu

0

Проверьте XMLHttpRequest send method, вы увидите, что вам нужно краевому параметр, если вы хотите использовать х -www форм-UrlEncode. Но чтобы отправить простую строку JSON, вы могли бы использовать это:

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

и должны работать (это не в моих модулях).

Если вы все еще хотите использовать формы, как SUPER ЛЕГКО это:

<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

Смежные вопросы