2012-04-18 76 views
18

我想發送數據到一個java servlet進行處理。這些數據將具有可變長度並在鍵/值對:

{ A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 } 

的數據並不需要進行格式化這種方式,它只是我怎麼會有現在。

var saveData = $.ajax({ 
     type: "POST", 
     url: "someaction.do?action=saveData", 
     data: myDataVar.toString(), 
     dataType: "text", 
     success: function(resultData){ 
      alert("Save Complete"); 
     } 
}); 
saveData.error(function() { alert("Something went wrong"); }); 

$.ajax()函數正常工作,因爲我確實收到「Save Complete」的提示。我的困境在servlet上。我如何檢索數據?我試圖用一個HashMap這樣的...

HashMap hm = new HashMap(); 
hm.putAll(request.getParameterMap()); 

...但hm原來是空,我猜是指.getParameterMap()沒有找到鍵/值對。我在哪裏錯了,或者我錯過了什麼?

+1

你吃過看看哪些數據以及如何將數據發送到服務器?我不認爲'myDataVar.toString()'是你想要的。 – 2012-04-18 17:32:38

+0

我正在將數據分析成字符串變量myDataVar,因此可以根據需要配置數據。我這樣做,因爲我在另一個模塊中做了同樣的事情,工作正常。但是,該模塊中的數據有點不同,我使用的是我認爲是GET的JQuery .ajax類型的默認值。 – iJared 2012-04-18 19:44:27

回答

31

你不想要一個字符串,你真的想要一個關鍵值對的JS地圖。例如,更改:

data: myDataVar.toString(), 

有:

var myKeyVals = { A1984 : 1, A9873 : 5, A1674 : 2, A8724 : 1, A3574 : 3, A1165 : 5 } 



var saveData = $.ajax({ 
     type: 'POST', 
     url: "someaction.do?action=saveData", 
     data: myKeyVals, 
     dataType: "text", 
     success: function(resultData) { alert("Save Complete") } 
}); 
saveData.error(function() { alert("Something went wrong"); }); 

jQuery的理解這樣的鍵值對,它不理解一個大的字符串。它只是將其作爲字符串傳遞給它。

更新:修正了代碼。

+0

只要服務器能夠理解字符串,沒關係...... – 2012-04-18 20:00:53

+0

我想我在我的一次迭代嘗試中嘗試過。我在這篇文章中的問題是如何獲取服務器端的數據?上面的hashmap語句沒有做我需要它們做的事情。 – iJared 2012-04-18 20:10:47

+0

即使長時間使用JSON和jQuery AJAX請求,我今天犯了一個愚蠢的錯誤,即將「data」參數的值寫爲字符串而不是對象。直到我看到你的答案時,我才意識到我是這樣做的。去證明你可以錯過盯着你的問題。感謝您直接慢跑。 – 2014-06-11 03:46:14

0

我不瞭解Java,但在$ .ajax中,如果按原樣傳遞對象映射(即刪除.toStrong()),然後就像任何文章一樣訪問它。就像我說的,我不知道Java是如何工作的,但是在PHP中,它就像其他任何帖子一樣在$_POST陣列中。

0

就目前而言,我將採用與前面所述不同的路線。我改變了我的數據格式化的方式:

&A2168=1&A1837=5&A8472=1&A1987=2 

在我使用getParameterNames服務器端(),將所有的按鍵爲枚舉,然後遍歷枚舉,並把該鍵和值成HashMap中。它看起來是這樣的:

Enumeration keys = request.getParameterNames(); 
HashMap map = new HashMap(); 
String key = null; 
while(keys.hasMoreElements()){ 
     key = keys.nextElement().toString(); 
     map.put(key, request.getParameter(key)); 
} 
0

POST命令獲取從servlet的價值,你可以採取的辦法,通過使用request.getParameter(key)格式將返回所需的值上this post解釋。

2

使用java腳本和ajex調用發送數據的簡單方法。

首先就在您的表單如

<form id="frm_details" method="post" name="frm_details"> 
<input id="email" name="email" placeholder="Your Email id" type="text" /> 
    <button class="subscribe-box__btn" type="submit">Need Assistance</button> 
</form> 

JavaScript邏輯目標上表單ID #frm_details透過後

$(function(){ 
     $("#frm_details").on("submit", function(event) { 
      event.preventDefault(); 

      var formData = { 
       'email': $('input[name=email]').val() //for get email 
      }; 
      console.log(formData); 

      $.ajax({ 
       url: "/tsmisc/api/subscribe-newsletter", 
       type: "post", 
       data: formData, 
       success: function(d) { 
        alert(d); 
       } 
      }); 
     }); 
    }) 





General 
Request URL:https://test.abc 
Request Method:POST 
Status Code:200 
Remote Address:13.76.33.57:443 

From Data 
email:[email protected]