2012-02-16 15 views
7

Tôi có biểu mẫu HTML hiện có mà tôi đang cố cập nhật để sử dụng jQuery.load(). Làm thế nào tôi có thể vượt qua tất cả các phần tử của biểu mẫu dưới dạng tham số POST thay vì phải chỉ định tham số nào cần vượt qua?jquery.load() để POST tất cả các phần tử của biểu mẫu thay vì phải chỉ định nội dung nào cần POST

Các yếu tố biểu mẫu được tạo tự động bởi tập lệnh và số lượng phần tử cũng như tên của các yếu tố khác nhau đáng kể đến mức không thể chỉ định tham số nào cần chuyển qua AJAX/POST. Có cách nào đơn giản để chuyển tới jQuery.load() tất cả các phần tử trong các thẻ <form></form> như thể biểu mẫu được gửi theo truyền thống không?

Trả lời

18

Bạn có thể sử dụng .serialize() để tuần tự hóa tất cả các yếu tố đầu vào của biểu mẫu để gửi cùng với lệnh jQuery.load() của bạn.

$('form').serialize() 

Ví dụ, sử dụng jQuery.load() (chỉ làm GET trừ khi bạn vượt qua nó một đối tượng cho dữ liệu, sau đó POST)

$.load(
    'postTo.php', 
    $('#yourFormId').serialize(), 
    complete(responseText, textStatus, XMLHttpRequest){ 
     //do your processing after the fact 
})) 

dùng, jQuery.ajax(), bạn có thể làm cho nó POST

$.ajax({ 
    'url': 'postTo.php', 
    'type': 'POST', 
    'data': $('#yourFormId').serialize(), 
    'success': function(result){ 
     //process here 
    } 
}); 

Xem: http://api.jquery.com/jQuery.ajax/

+0

Làm cách nào để áp dụng điều này theo cách sao chép chức năng bình thường của việc gửi biểu mẫu bằng POST? Tôi đang cố gắng để có được kết quả trong cùng một định dạng ($ _POST) mảng, trong đó có mảng lồng nhau. –

+0

Ah, bạn sẽ không thể 'POST' bằng' load() 'vì nó sử dụng' GET'. Bạn sẽ muốn sử dụng '$ .ajax' hoặc một cái gì đó khác để thực sự thay đổi phương thức thành' POST'. Tôi sẽ cập nhật bài đăng gốc của mình để hiển thị bài đăng này. – derekaug

+1

Bạn đã cân nhắc sử dụng $ .post() chưa? –

25

Dễ dàng: Khi bạn thu thập dữ liệu biểu mẫu của mình và dán nó làm tham số thứ hai là load(), hãy sử dụng serializeArray(data) và không sử dụng serialize(data), như câu trả lời hiện được chấp nhận.

serialize() trả về một chuỗi, trong khi serializeArray() trả về một đối tượng. load() gửi POST nếu dữ liệu là đối tượng. Nếu dữ liệu là một chuỗi, load() sẽ gửi GET.

+2

Đây phải là câu trả lời đúng. – user2233706

+0

cả hai câu trả lời đều giúp ích rất nhiều. Sử dụng $ .load đã có thể thay đổi div đã cho, bằng cách sử dụng cuộc gọi ajax rất dễ dàng, nhưng không thể tìm thấy cùng một cách để làm điều đó trong $ .ajax. – Babulu

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