2009-01-08 74 views
49

Có vẻ như đây là thứ được tích hợp vào jQuery mà không cần nhiều hơn một vài dòng mã, nhưng tôi không thể tìm thấy giải pháp "đơn giản". Nói, tôi có một hình thức HTML:Gửi biểu mẫu bằng AJAX và jQuery

<form method="get" action="page.html"> 
    <input type="hidden" name="field1" value="value1" /> 
    <input type="hidden" name="field2" value="value2" /> 
    <select name="status"> 
     <option value=""></option> 
     <option value="good">Good</option> 
     <option value="bad">Bad</option> 
    </select> 
</form> 

Khi ai đó làm thay đổi lĩnh vực lựa chọn, tôi muốn gửi biểu mẫu sử dụng ajax để cập nhật cơ sở dữ liệu. Tôi nghĩ sẽ có một số cách để làm như sau mà không tự tạo ra các giá trị/thuộc tính, chỉ cần gửi cho họ tất cả, như:

$("select").change(function(){ 
    $.get("page.html?" + serializeForm()); 
}); 

tôi đang thiếu gì?

+1

Re: cập nhật, Bạn có lẽ không muốn đây là một yêu cầu GET vì bạn đang thông qua dữ liệu đến máy chủ. Nhưng vâng, đó là ý tưởng chung. Bạn được chào đón :) – rfunduk

+1

Đây là cách tôi đăng dữ liệu biểu mẫu để hành động trên máy chủ http://tryconcepts.blogspot.in/2012/02/post-form-data-using-jquery-post-or.html – yashpal

Trả lời

10

Đây là những gì đã kết thúc.

$("select").change(function(){ 
    $.get("/page.html?" + $(this).parent("form").find(":input").serialize()); 
}); 
29

Có một số đẹp form plugin cho phép bạn gửi biểu mẫu HTML không đồng bộ.

$(document).ready(function() { 
    $('#myForm1').ajaxForm(); 
}); 

hoặc

$("select").change(function(){ 
    $('#myForm1').ajaxSubmit(); 
}); 

gửi biểu mẫu ngay

+0

Cảm ơn ! Plugin này thật tuyệt vời! – Rich

133

Đầu tiên cho hình thức của bạn một thuộc tính id, sau đó sử dụng mã như thế này:

$(document).ready(function() { 
    var form = $('#my_awesome_form'); 

    form.find('select:first').change(function() { 
    $.ajax({ 
     type: "POST", 
     url: form.attr('action'), 
     data: form.serialize(), 
     success: function(response) { 
     console.log(response); 
     } 
    }); 
    }); 

}); 

Vì vậy, mã này sử dụng .serialize() để lấy ra các dữ liệu liên quan từ biểu mẫu. Nó cũng giả định lựa chọn bạn quan tâm là lựa chọn đầu tiên trong biểu mẫu.

Để tham khảo trong tương lai, jQuery docs rất, rất tốt.

+7

Một điểm rất quan trọng, có thể hoàn toàn rõ ràng với nhiều người nhưng chắc chắn không phải như vậy với tôi mà bị bỏ qua ở đây và trong tất cả các bài viết SO khác về chủ đề này là để thành công bạn phải đảm bảo rằng nút bạn đang sử dụng để kích hoạt sự kiện gây ra việc gửi biểu mẫu thông qua ajax IS NOT type submit! Khác điều này sẽ luôn thất bại. Cách tiếp cận serialize ở đây là gọn gàng. – codepuppy

+8

Vì mã này xử lý việc gửi biểu mẫu trên thay đổi của một hộp chọn, nó không quan trọng nếu bạn có '' trong biểu mẫu. Nếu bạn có nút gửi trong biểu mẫu, bạn chỉ cần xử lý sự kiện 'submit' trên biểu mẫu thay thế và ngăn tác vụ mặc định. Một lần nữa [docs] (http://api.jquery.com/submit/) đến để giải cứu về điều này :) – rfunduk

+0

Nice Solution..Cảm ơn – JEMI

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