2012-04-18 38 views
18

Tôi muốn gửi dữ liệu đến một servlet java để xử lý. Dữ liệu sẽ có độ dài thay đổi và nằm trong các cặp khóa/giá trị:

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

Dữ liệu không cần phải được định dạng theo cách này, bây giờ chỉ là tôi có nó.

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"); }); 

Chức năng $.ajax() hoạt động tốt khi tôi nhận được cảnh báo cho "Lưu hoàn tất". Tình trạng khó xử của tôi là trên servlet. Làm cách nào để truy xuất dữ liệu? Tôi cố gắng để sử dụng một HashMap như thế này ...

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

... nhưng hm hóa ra được null mà tôi đoán có nghĩa là .getParameterMap() không là tìm các cặp khóa/giá trị. Tôi đang đi sai hoặc tôi đang mất tích ở đâu?

+1

Quý vị có một cái nhìn vào những gì dữ liệu và cách dữ liệu được gửi đến máy chủ ? Tôi không nghĩ rằng 'myDataVar.toString()' là những gì bạn muốn. –

+0

Tôi đang concatinating dữ liệu vào biến myDataVar chuỗi để dữ liệu có thể được cấu hình anyway tôi muốn. Tôi có nó theo cách này bởi vì tôi đã làm điều tương tự trong một mô-đun hoạt động tốt.Tuy nhiên, các dữ liệu trong mô-đun đó là một chút khác nhau và tôi đang sử dụng mặc định của JQuery loại .ajax mà tôi nghĩ là GET. – iJared

Trả lời

31

Bạn không muốn một chuỗi, bạn thực sự muốn có một bản đồ JS của các cặp giá trị khóa. Ví dụ, thay đổi:

data: myDataVar.toString(), 

với:

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 hiểu cặp giá trị quan trọng như vậy, nó không hiểu một chuỗi lớn. Nó chuyển nó đơn giản như một chuỗi.

CẬP NHẬT: Mã cố định.

+0

Miễn là máy chủ hiểu chuỗi ký tự, nó là tốt ... –

+0

Tôi nghĩ rằng tôi đã thử rằng trong một trong những nỗ lực lặp lại của tôi. Câu hỏi của tôi với bài đăng này là làm cách nào để tôi nhận được dữ liệu ở phía máy chủ? Các câu lệnh băm trên không làm những gì tôi cần chúng làm. – iJared

+0

Thậm chí sau một thời gian dài làm việc với các yêu cầu JSON và jQuery AJAX, tôi đã mắc sai lầm ngớ ngẩn khi viết giá trị của tôi cho tham số "dữ liệu" dưới dạng chuỗi chứ không phải là một đối tượng. Tôi thậm chí không nhận ra tôi đã làm theo cách đó cho đến khi tôi thấy câu trả lời của bạn. Đi để cho thấy bạn có thể bỏ lỡ các vấn đề đang nhìn chằm chằm vào mặt bạn. Cảm ơn vì đã chạy thẳng tôi. –

0

Tôi không biết về Java, nhưng trong $ .ajax, nếu bạn vượt qua bản đồ đối tượng như, (ví dụ: loại bỏ .toStrong()) và sau đó nó có thể truy cập giống như bất kỳ bài đăng nào. Như tôi đã nói, tôi không biết nó hoạt động như thế nào trong Java, nhưng trong PHP, nó chỉ nằm trong mảng $_POST giống như bất kỳ bài đăng nào khác.

0

Hiện tại, tôi đang đi theo một tuyến đường khác so với trước đây. Tôi đã thay đổi cách tôi đang định dạng dữ liệu vào:

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

Về phía server Tôi đang sử dụng getParameterNames() để đặt tất cả các phím vào một Enumerator và sau đó iterating qua Enumerator và đặt các phím và các giá trị vào một Bản đồ băm. Nó trông giống như sau:

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

Để có được giá trị từ servlet từ POST lệnh, bạn có thể làm theo phương pháp này như được giải thích trên this post bằng cách sử dụng định dạng request.getParameter(key) mà sẽ trả về giá trị mà bạn muốn.

2

Phương thức đơn giản để gửi dữ liệu bằng cách sử dụng tập lệnh java và cuộc gọi ajex.

Đầu tiên đúng hình thức của bạn như thế này

<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 mục tiêu logic trên hình thứC#frm_details id sau khi điền đầy đủ vào

$(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] 
Các vấn đề liên quan