2010-06-17 33 views
15

Tôi muốn thực hiện cuộc gọi ajax dưới dạng POST, nó sẽ chuyển đến servlet của tôi. Tôi muốn gửi dữ liệu được tham số hóa, như sau:Sử dụng jquery để tạo POST, cách cung cấp thông số 'dữ liệu' đúng cách?

var mydata = 'param0=some_text&param1=some_more_text'; 

Tôi cung cấp đây làm tham số 'dữ liệu' của cuộc gọi jquery ajax(). Vì vậy, điều này nên được chèn vào trong cơ thể của POST, phải không? (Ý tôi là, không được nối vào url 'mysite/save' của tôi?):

$.ajax({ 
    url: 'mysite/save', 
    type: 'POST', 
    data: mydata 
}); 

nó có vẻ hoạt động chính xác. Trong servlet của tôi, tôi chỉ đổ tất cả các thông số đã nhận, và tôi thấy tất cả chúng đều thông qua một cách độc đáo:

private void printParams(HttpServletRequest req) { 
    Enumeration paramNames = req.getParameterNames(); 
    while (paramNames.hasMoreElements()) { 
     // print each param key/val here. 
    } 
} 

cũng nên mã hóa chuỗi dữ liệu trước khi sử dụng? Giống như:

var mydata = 'param0=' + urlencode('hi there!'); 
mydata += '&param1=' + urlencode('blah blah'); 
mydata += '%param2=' + urlencode('we get it'); 

Cảm ơn!

Trả lời

29

Một cách dễ dàng hơn là để cung cấp các data bất động sản như một đối tượng, như thế này:

$.ajax({ 
    url: 'mysite/save', 
    type: 'POST', 
    data: { param0:'hi there!', param1:'blah blah', param2:'we get it' } 
}); 

Nếu không, có bạn nên mã hóa nó, như bất cứ điều gì với một & ví dụ sẽ vít những thứ lên rất nhanh chóng. Cung cấp nó như là một đối tượng là một cách tiếp cận cleaer/đơn giản hơn mặc dù, theo ý kiến ​​của tôi anyway.

Bạn cũng có thể không gian nó ra, và lấy tài sản từ nơi khác inline, như thế này:

$.ajax({ 
    url: 'mysite/save', 
    type: 'POST', 
    data: { 
      param0: $('#textbox0').val(), 
      param1: $('#textbox1').val(), 
      param2: $('#textbox2').val() 
     } 
}); 

Edit: Nếu bạn tò mò như thế nào jQuery không mã hóa này trong nội bộ, nó sử dụng $.param() (mà bạn cũng có thể sử dụng trực tiếp) để mã hóa đối tượng thành một chuỗi, được gọi là here và các đường ruột here.

+0

Rất tuyệt, cảm ơn. – user246114

3

Nếu bạn có biểu mẫu, bạn cũng có thể thực hiện var data = jQuery("#myForm").serialize(); để đặt biểu mẫu ở dạng jQuery.ajax có thể hiểu và sử dụng. Nếu không, hãy sử dụng đối tượng theo nghĩa đen được mô tả trong câu trả lời của Nick.

2

có thể điều này giúp bạn

function CallPageSync(url, data) { 
    var response; 
    $.ajax({ 
     async: false, 
     url: url, 
     data: data, 
     timeout: 4000, 
     success: function(result) { 
      response = result; 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      response = "err--" + XMLHttpRequest.status + " -- " + XMLHttpRequest.statusText; 
     } 
    }); 
    return response; 
} 

và bạn có thể gọi nó như

response = CallPageSync(checkPageURL, "un=" + username); 
+0

Tôi nghĩ anh ấy muốn biết * cách * để xây dựng tham số 'data' và không phải cách sử dụng' jQuery.ajax'. –

+0

chỉ cần viết nó khi bạn viết nó trong URL: "ID = 10 & Tên = aaaaa" –

+0

xác định loại gửi là tốt hơn tôi nghĩ .. loại: 'POST' –

0

Bạn không cần phải URL biến POST mã hóa. Tuy nhiên, nếu bạn đang tương tác với một cơ sở dữ liệu, bạn sẽ muốn chắc chắn rằng các biến của bạn được tiêm tấn công được bảo vệ.

Những gì bạn có sẽ làm việc, tuy nhiên như Vivin được đề cập, nếu đó là biểu mẫu thì cách tốt nhất để thực hiện là qua .serialize().

Tôi sử dụng cá nhân LOT này cho tất cả các hình thức gửi của tôi (được thực hiện qua .ajax()).

Các vấn đề liên quan