2011-06-30 50 views
69

hiện tại tôi có như sau:

$.ajax({ 
    type: 'POST', 
    url: this.action, 
    data: $(this).serialize(), 
}); 

này hoạt động tốt, tuy nhiên tôi muốn thêm một giá trị cho dữ liệu, vì vậy tôi cố gắng

$.ajax({ 
    type: 'POST', 
    url: this.action, 
    data: $(this).serialize() + '&=NonFormValue' + NonFormValue, 
}); 

Nhưng điều đó không đăng chính xác. Bất kỳ ý tưởng về cách bạn có thể thêm một mục vào chuỗi serialize? Đây là biến trang toàn cầu không phải là biểu mẫu cụ thể.

+0

Bạn có thể làm rõ "cái gì không được đăng chính xác" nghĩa là gì? Chuyện gì đã xảy ra?Những gì đã được nhận bởi máy chủ? –

+4

Không nên là ''& NonFormValue =' + NonFormValue'? –

Trả lời

67

Thay vì

data: $(this).serialize() + '&=NonFormValue' + NonFormValue, 

có thể bạn muốn

data: $(this).serialize() + '&NonFormValue=' + NonFormValue, 

Bạn nên cẩn thận để URL mã hóa giá trị của NonFormValue nếu nó có thể chứa bất kỳ ký tự đặc biệt nào.

+0

sử dụng 'encodeURIComponent' để đảm bảo rằng' NonFormValue' không có bất kỳ ký tự đặc biệt nào –

6

Thêm mục đầu tiên và sau đó serialize:

$.ajax({ 
    type: 'POST', 
    url: this.action, 
    data: $.extend($(this), {'NonFormValue': NonFormValue}).serialize() 
}); 
+2

Điều này không hiệu quả đối với tôi = [ – ThomasReggi

5

trước hết không

data: $(this).serialize() + '&=NonFormValue' + NonFormValue, 

nên

data: $(this).serialize() + '&NonFormValue=' + NonFormValue, 

và thứ hai bạn có thể sử dụng

url: this.action + '?NonFormValue=' + NonFormValue, 

hoặc nếu hành động đã có chứa bất kỳ thông số

url: this.action + '&NonFormValue=' + NonFormValue, 
+0

Câu trả lời thứ hai của bạn sẽ không có tác dụng tương tự như câu hỏi được yêu cầu; 'NonFormValue' sẽ được gửi dưới dạng tham số URL, không phải trong dữ liệu đã đăng. Điều này có thể không lý tưởng nếu a) bất cứ điều gì đang chạy ở phía máy chủ mong đợi nó được POST (ví dụ như sử dụng 'request.POST' thay vì' request.REQUEST' trong Django), hoặc b) 'NonFormValue' là cái gì đó không nên xuất hiện trong thanh URL hoặc lịch sử vì lý do bảo mật hoặc vì đó là giá trị thoáng qua. –

132

Trong khi câu trả lời của matt b sẽ hoạt động, bạn cũng có thể sử dụng .serializeArray() để lấy mảng từ dữ liệu biểu mẫu, sửa đổi và sử dụng jQuery.param() để chuyển đổi thành dạng được mã hóa url. Bằng cách này, jQuery xử lý tuần tự hóa dữ liệu bổ sung của bạn cho bạn.

var data = $(this).serializeArray(); // convert form to array 
data.push({name: "NonFormValue", value: NonFormValue}); 
$.ajax({ 
    type: 'POST', 
    url: this.action, 
    data: $.param(data), 
}); 
+11

Đây chắc chắn là lựa chọn tốt nhất - để lại việc tuần tự hóa hoàn toàn với jQuery, trong khi vẫn có khả năng thêm các giá trị mới cho các giá trị được lấy ra từ biểu mẫu. – jcsanyi

+4

Đây là cách tốt nhất để làm điều đó, không chơi với dây –

3

Đừng quên bạn luôn có thể làm:

<input type="hidden" name="NonFormName" value="NonFormValue" /> 

ở dạng thực tế của bạn, có thể là tốt hơn cho mã của bạn tùy thuộc vào trường hợp.

+0

Chắc chắn không phải là một ý tưởng tốt và chính xác – user3284463

0

Bạn có thể viết một chức năng phụ để xử lý dữ liệu mẫu và bạn nên thêm dữ liệu nonform của bạn như là valu dữ liệu trong ví dụ form.seethe:

<form method="POST" id="add-form"> 
    <div class="form-group required "> 
     <label for="key">Enter key</label> 
     <input type="text" name="key" id="key" data-nonformdata="hai"/> 
    </div> 
    <div class="form-group required "> 
     <label for="name">Ente Name</label> 
     <input type="text" name="name" id="name" data-nonformdata="hello"/> 
    </div> 
    <input type="submit" id="add-formdata-btn" value="submit"> 
</form> 

Sau đó thêm jquery này để chế biến thức

<script> 
$(document).onready(function(){ 
    $('#add-form').submit(function(event){ 
     event.preventDefault(); 
     var formData = $("form").serializeArray(); 
     formData = processFormData(formData); 
     // write further code here----> 
    }); 
}); 
processFormData(formData) 
{ 
    var data = formData; 
    data.forEach(function(object){ 
     $('#add-form input').each(function(){ 
      if(this.name == object.name){ 
       var nonformData = $(this).data("nonformdata"); 
       formData.push({name:this.name,value:nonformData}); 
      } 
     }); 
    }); 
    return formData; 
} 

0

Chúng ta có thể làm như sau:

data = $form.serialize() + "&foo=bar"; 

Ví dụ:

var userData = localStorage.getItem("userFormSerializeData"); 
var userId = localStorage.getItem("userId"); 

$.ajax({ 
    type: "POST", 
    url: postUrl, 
    data: $(form).serialize() + "&" + userData + "&userId=" + userId, 
    dataType: 'json', 
    success: function (response) { 
     //do something 
    } 
}); 
Các vấn đề liên quan