jQuery $ .post -json-入力データを送信/受信する適切な方法(クライアント側のみ) - 2つの質問Quest
質問
次のようなものがあると想像しましょう。
$.post('somescript.php', 'WHAT CAN WE PUT HERE?',
function(replyData) {
1)デフォルトでは、 3番目の議論 $ .POSTメソッドの、XMLResponse応答を正しく読みますか?それで、なぜ私たちはその議論「ReplyData」が必要なのですか?その議論を持つために私たちが持っているかもしれない理由は何ですか?
2) 2番目の議論 送信されるデータを受け入れます。 Ok。 JSONを使用したいのですが、その2番目の引数でJSON形式を使用する必要があるかどうかはわかりません また そのデータを含む入力フォームフィールドをターゲットにしますか?
追加のメモ:データは入力フィールドから届きます。$ .post ajax要求を介してサーバーに送信する必要があります。 JSONエンコードとJSONデコードPHP関数を使用する予定です。
よろしくお願いします、mem
解決
replyData
引数には、サーバーによって返された応答の本文が含まれています。その後、ページに表示するために操作して、サーバー側がデータを正常に処理したことを確認します。データを返さないでください)。
(JSON形式で)提供しているデータは、クエリ文字列の形式である必要があります。 param=value
. 。値も使用して、適切にエンコードする必要があります encodeuricomponent():
$.post('somescript.php', 'data='+encodeURIComponent(myJSON),
function(replyData) {
次に、PHPスクリプトのJSONにアクセスできます。 $ _POST スーパーグローバル:
$data = json_decode($_POST['data']);
ただし、JSONは単純な入力フィールドには少し過剰になります。フォームフィールドの名前/バリューペアの代わりにJSONを使用することは珍しいことです。
他のヒント
1)3番目の引数はコールバック関数です。サンプルのように匿名関数を提供する場合、それにアクセスするために引数に名前を付ける必要があります。 JSON構造を返す場合、ReplyData.fooなどにアクセスできます。
2)フォームから値を引き出し、JSON構造を構築できます。
var data = {};
data.threadid = $(form).find('input[name=threadid]').val();
data.commentid = $(form).find('input[name=commentid]').val();
$.post('somescript.php', data, function(replyData) { alert(replyData.foo); } );
私はこの機能をDrupalから盗み、Zend_json_serverが例外をスローさせたアレイとオブジェクトの後続のコンマを修正しました。
var toJson = function(v) {
// typeof null == object so we check beforehand;
if ( v == null ){
return null;
}
switch (typeof v) {
case 'boolean':
return v == true ? 'TRUE' : 'FALSE';
case 'number':
return v;
case 'string':
return '"'+ v +'"';
case 'object':
if ( !(v instanceof Array) ){
var output = "{";
for(i in v) {
output = output + '"'+i+'"' + ":" + toJson(v[i]) + ",";
}
output = output.substr(0,output.length-1) + "}"; // Fix the trailing comma error wich isn't officialy allowed.
}else{
var output = "[";
for(i in v) {
output = output + toJson(v[i]) + ",";
}
output = output.substr(0,output.length-1) + "]"; // Fix the trailing comma error wich isn't officialy allowed.
}
return output;
default:
return null;
}
}
次に、このようなデータをフィードしてください:
var myJsonString = toJson($('myform').serialize());
Wichは、変数から再帰的に生成されたJSON文字列を返します。私のアプリケーションのほとんどで機能します。
一般的に私は同意します アンディe あなたが見たらそれ ストリング 投稿されるデータのように見えるはずです
'data='+encodeURIComponent(myJSON)
練習では、$ .postの2番目のパラメーターをほとんど文字列として使用しないでください。
$.post('somescript.php', 'data='+encodeURIComponent(myJSON), ... );
しかし、オブジェクトとして:
$.post('somescript.php', {data: myJSON}, ...);
その後、jQueryコール encodeURIComponent
関数と文字列を構築します 'data='+encodeURIComponent(myJSON)
に関して jquery.param() 初めの。理解すること、それが持っていること myJSON
投稿するデータを含むオブジェクトからのいくつかのJSONエンコード関数に関して、このJSON文字列を作成する必要があります。したがって、コードは次のように練習を見ます
$.post('somescript.php', { data: JSON.stringify(myObject) }, ...);
どこ JSON.stringify
json2.jsからのJavaScript関数です。 http://www.json.org/js.html.