2009-08-10 32 views
73

JSON biçimine dönüştürmem gereken ve daha sonra bir JavaScript işleviyle POST uygulamasına ihtiyacım olan bazı verilerim var.JSON biçimindeki POST verileri

<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> 

Bu, gönderinin şimdiki şeklidir. Değerleri JSON biçiminde göndermeli ve POST'u JavaScript ile yapmalıyım.

+0

JSON verilerinin yapısı ne olmalı? Sadece "{" firstName ":" harry "," lastName ":" test "," toEmail ":" [email protected] "}'? – Gumbo

+1

Evet, veriler tarif ettiğiniz biçimde olurdu! cevaplar için teşekkürler! –

cevap

29

İşte

<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> 

jQuery serializeArray fonksiyon formu değerlere sahip bir JavaScript nesnesi oluşturur ... jQuery kullanarak bir örnektir. Ardından, gerekirse bir dizeye dönüştürmek için JSON.stringify'u kullanabilirsiniz. Ve vücudunuzun yükünü de kaldırabilirsiniz.

+8

Bu, verileri JSON formatında göndermeyecektir. –

+0

Nitekim, serileştirme işlevi form verilerini bir JSON nesnesine dönüştürür. –

+2

Josh, jQuery örneğinde aksi belirtilmedikçe: JSON'dan çok standart bir sorgu dizgisine benziyor. – Sampson

125

jQuery öğesini istediğinizden emin değilsiniz.

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

Bence bu, 100K çerçeve olmaksızın 20 satırlık kodda işin nasıl yapılacağının güzel, temiz ve özlü bir örneğidir. – spidee

+1

@IanKuca Teşekkürler :) Verileri kullanmadan json verilerini gönderebilir miyiz diye merak ediyordum? "Cmd" gibi veri göndermek istiyorum: "" değil '% 3Cimg + src% 3D0 + onerror% 3Dalert% 281% 29% 3E' – liweijian

+1

@liweijian Eğer 'JSON.stringify' döndürürse onunla gitmelisiniz . –

0

, sen json içine tüm formu açmak için bunu yapabilirsiniz: sadece xhr.send(JSON.stringify(data)); sonra

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

ve Jan'ın orijinal cevap gibi.