2009-08-10 11 views
73

JSON形式に変換してからJavaScript関数を使用してPOSTする必要があるデータがあります。JSON形式のPOSTデータ

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

これは投稿の外観です。 JSON形式で値を送信し、JavaScriptを使用してPOSTを実行する必要があります。ここ

+0

JSONデータにはどのような構造が必要ですか? '{" firstName ":" harry "、" lastName ":" tester "、" toEmail ":" [email protected] "}? – Gumbo

+1

はい、データは記述した形式になります!返信ありがとう! –

答えて

29

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> 

を使用してjQueryのserializeArray関数はフォームの値を持つJavaScriptオブジェクトを作成する例です。その後、必要に応じてJSON.stringifyを使用して文字列に変換することができます。そして体の負荷も取り除くことができます。

+8

JSON形式のデータは送信されません。 –

+0

実際、serialize関数はフォームデータをJSONオブジェクトに変換します。 –

+2

Josh、jQueryの例ではそうでないことが示されています:JSONのような標準的なクエリ文字列によく似ています。 – Sampson

125

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

これは、100Kのフレームワークなしで、20行のコードでジョブを実行する方法の良い、きれいで簡潔な例だと思います。 – spidee

+1

@IanKucaありがとう:)私は、データをurlencodeなしでjsonデータを送信できるかどうか疑問に思っていましたか? '' cmd'のようなデータを送信したいという意味です: '''''%3Cimg + src%3D0 + onerror%3Dalert%281%29%3E' – liweijian

+1

@liweijian 'JSON.stringify'が返すもの。 –

0

新しいFormDataオブジェクト(および他のいくつかのES6のもの)を使用して、JSONにあなたの全体の形を回すためにこれを行うことができます:

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

してからちょうどxhr.send(JSON.stringify(data));月のオリジナルの答えのように。