2009-08-10 9 views
73

Tôi có một số dữ liệu cần chuyển đổi sang định dạng JSON và sau đó BẬT nó bằng chức năng JavaScript.Dữ liệu POST ở định dạng JSON

<body onload="javascript:document.myform.submit()"> 
<form action="https://www.test.net/Services/RegistrationService.svc/InviteNewContact" method="post" name="myform"> 
    <input name="firstName" value="harry" /> 
    <input name="lastName" value="tester" /> 
    <input name="toEmail" value="[email protected]" /> 
</form> 
</body> 

Đây là cách bài đăng hiện ra. Tôi cần nó gửi các giá trị theo định dạng JSON và thực hiện POST với JavaScript.

+0

Dữ liệu JSON nên có cấu trúc nào? Chỉ cần '{" firstName ":" harry "," lastName ":" tester "," toEmail ":" [email protected] "}'? – Gumbo

+1

Có dữ liệu ở định dạng bạn mô tả! cảm ơn cho các phản ứng! –

Trả lời

29

Dưới đây là một ví dụ sử dụng jQuery ...

<head> 
    <title>Test</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript" src="http://www.json.org/json2.js"></script> 
    <script type="text/javascript"> 
    $(function() { 
     var frm = $(document.myform); 
     var dat = JSON.stringify(frm.serializeArray()); 

     alert("I am about to POST this:\n\n" + dat); 

     $.post(
     frm.attr("action"), 
     dat, 
     function(data) { 
      alert("Response: " + data); 
     } 
     ); 
    }); 
    </script> 
</head> 

Chức năng jQuery serializeArray tạo ra một đối tượng Javascript với các giá trị mẫu. Sau đó, bạn có thể sử dụng JSON.stringify để chuyển đổi thành chuỗi, nếu cần. Và bạn cũng có thể loại bỏ quá tải cơ thể.

+8

Điều đó sẽ không gửi dữ liệu ở định dạng JSON. –

+0

Như một vấn đề của thực tế, hàm serialize chuyển đổi dữ liệu biểu mẫu thành một đối tượng JSON. –

+2

Josh, ví dụ trên jQuery cho thấy nếu không: Trông giống như một chuỗi truy vấn chuẩn hơn là JSON. – Sampson

125

Không chắc chắn nếu bạn muốn jQuery.

var form; 

form.onsubmit = function (e) { 
    // stop the regular form submission 
    e.preventDefault(); 

    // collect the form data while iterating over the inputs 
    var data = {}; 
    for (var i = 0, ii = form.length; i < ii; ++i) { 
    var input = form[i]; 
    if (input.name) { 
     data[input.name] = input.value; 
    } 
    } 

    // construct an HTTP request 
    var xhr = new XMLHttpRequest(); 
    xhr.open(form.method, form.action, true); 
    xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 

    // send the collected data as JSON 
    xhr.send(JSON.stringify(data)); 

    xhr.onloadend = function() { 
    // done 
    }; 
}; 
+43

Tôi nghĩ đây là một ví dụ tốt, gọn gàng, ngắn gọn về cách hoàn thành công việc trong 20 dòng mã, không có 100K khung. – spidee

+1

@IanKuca Cảm ơn :) Tôi đã tự hỏi nếu chúng tôi có thể gửi dữ liệu json mà không cần urlencode dữ liệu? Ý tôi là tôi muốn gửi dữ liệu như '" cmd ":" "' không '% 3Cimg + src% 3D0 + onerror% 3Dalert% 281% 29% 3E' – liweijian

+1

@liweijian Bạn nên dùng bất cứ thứ gì' JSON.stringify' trả về . –

0

Sử dụng FormData đối tượng mới (và một số công cụ ES6 khác), bạn có thể làm điều này để biến toàn bộ hình thức của bạn vào json:

let data = {}; 
let formdata = new FormData(theform); 
for (let tuple of formdata.entries()) data[tuple[0]] = tuple[1]; 

và sau đó chỉ cần xhr.send(JSON.stringify(data)); như trong câu trả lời ban đầu của Jan.