2016-07-23 19 views
5

tôi có thể xử lý các giá trị hình thức của tôi bằng cách nhắm mục tiêu các lớp mẫu <form class="my_form_class">:Thêm nhiều dữ liệu với jQuery ajax

jQuery.ajax({ 
     type:"GET", 
     url: "/wp-admin/admin-ajax.php", 
     data: my_form_class, 
     context: this, 
     success:function(data){ 

      // do stuff 
     } 
}); 

này hoạt động tuyệt vời.

Nhưng tôi muốn thêm nhiều dữ liệu hơn, vì vậy tôi cố gắng:

data: { my_form_class, security : 'foo' }, 

Nó đã không làm việc. Tôi làm gì sai ở đây? Tôi đã thử:

data: { my_form_class : my_form_class, security : 'foo' }, 

Và rõ ràng là nó không hoạt động.

Trả lời

3

Theo định nghĩa của jQuery ajax

dữ liệu

Loại: PlainObject hoặc string hoặc mảng dữ liệu được gửi đến máy chủ. Nó được chuyển thành chuỗi truy vấn, nếu chưa phải là một chuỗi. Nó được nối vào url cho các yêu cầu GET. Xem tùy chọn processData để ngăn việc xử lý tự động này. Đối tượng phải là cặp khóa/giá trị. Nếu giá trị là một mảng, jQuery nối tiếp nhiều giá trị với cùng một khóa dựa trên giá trị của cài đặt truyền thống (được mô tả bên dưới).

Bạn có thể sử dụng jquery paramjQuery serialize:

$('.my_form_class').serialize() + '&' + $.param({security : 'foo'}); 

đoạn của tôi:

$(function() { 
 
    $('#btn').on('click', function(e) { 
 
    console.log($('.my_form_class').serialize() + '&' + $.param({security : 'foo'})); 
 
    $.ajax({ 
 
     type:"GET", 
 
     url: "/wp-admin/admin-ajax.php", 
 
     data: $('.my_form_class').serialize() + '&' + $.param({security : 'foo'}), 
 
     context: this, 
 
     success:function(data){ 
 
     // do stuff 
 
     } 
 
    }).fail(function(jqXHR, textStatus, errorThrown) { 
 
     console.log('ajax error: ' + textStatus) 
 
    }); 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<form class="my_form_class"> 
 
    First name:<br> 
 
    <input type="text" name="firstname" value="name"><br> 
 
    Last name:<br> 
 
    <input type="text" name="lastname" value="surname"> 
 
</form> 
 
<button id="btn">Submit Form with Ajax</button>

+0

Hoạt động tuyệt vời, cảm ơn bạn đã trích đoạn trích. –

+1

@Henrik Tại sao bạn lại chấp nhận giải pháp dài dòng hơn, khi có giải pháp đơn giản hơn, cũng đã được đăng tai nghe? – nicael

+0

@nicael Tôi không biết rằng câu trả lời đã được đăng sớm hơn lần này, và vào thời điểm chấp nhận câu trả lời đúng, người kia có lỗi đánh máy (tôi tin rằng bạn đã giải quyết). –

6

dữ liệu của biểu mẫu có thể được tuần tự, và dữ liệu có thể được gửi dưới dạng một chuỗi :) tôi đã không kiểm tra này, nhưng nó phải làm việc :)

jQuery.ajax({ 
     type:"GET", 
     url: "/wp-admin/admin-ajax.php", 
     data: $('.my_form_class').serialize() + "&security=foo", 
     context: this, 
     success:function(data){ 

      // do stuff 
     } 
}); 
+0

Tôi đoán rằng nên được nối vào 'url', không 'dữ liệu'. – nicael

+1

Vâng vâng, bởi vì nó là một yêu cầu nhận được nó có thể được nối thêm vào url, nhưng dữ liệu cũng nên hoạt động :) http://api.jquery.com/jquery.ajax xem phần dữ liệu, chuyển đổi thành chuỗi truy vấn nếu chưa phải là một chuỗi :) –

+0

Vâng, sau đó nó có vẻ là cách tiếp cận đúng. – nicael

1

Sử dụng FormData và lặp trên đối tượng dữ liệu của bạn và thêm nó như

var fd = new FormData(); 
fd.append('key', value); 

$(function(){ 
 
    $('#btn').on('click',function(){ 
 
    var value = 'abc'; 
 
    var fd = new FormData(); 
 
    var my_form_data = { 
 
     fname: $('#firstname').val(), 
 
     lname: $('#lastname').val() 
 
    }; 
 
    for (var key in my_form_data) { 
 
     if (my_form_data.hasOwnProperty(key)) { 
 
     fd.append(key, my_form_data[key]); 
 
     } 
 
    } 
 
    fd.append('value', value); 
 
    console.log(fd); 
 
    jQuery.ajax({ 
 
      type:"GET", 
 
      url: "/wp-admin/admin-ajax.php", 
 
      data: fd, 
 
      context: this, 
 
      success:function(data){ 
 

 
       // do stuff 
 
      } 
 
    }); 
 
    }) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form class="form_data"> 
 
    First name:<br> 
 
    <input type="text" id="firstname"><br> 
 
    Last name:<br> 
 
    <input type="text" id="lastname"> 
 
</form> 
 
<button id="btn">Submit</button>

Phương pháp khác bao gồm sử dụng .serialize(). Nó có thể được sử dụng khi bạn muốn dữ liệu trong chuỗi truy vấn như

var data = $('.my_form_data').serialize(); 
data += '&security=foo'; 

AJAX

jQuery.ajax({ 
     type:"GET", 
     url: "/wp-admin/admin-ajax.php", 
     data: data, 
     context: this, 
     success:function(data){ 

      // do stuff 
     } 
}); 
Các vấn đề liên quan