2009-08-29 32 views

答えて

6

jQueryのserialize/serializeArrayはフォーム要素でのみ機能します。

var thing = {plugin: 'jquery-json', version: 2.2}; 

var encoded = $.toJSON(thing);   
//'{"plugin":"jquery-json","version":2.2}' 
var name = $.evalJSON(encoded).plugin; 
//"jquery-json" 
var version = $.evalJSON(encoded).version; 
// 2.2 

ほとんどの人が私に尋ねた私はなぜでしょう:

http://code.google.com/p/jquery-json/

このプラグインは、JSONにしてから変換することが簡単になります:私はあなたがこのような、より一般的な何かを探していると思います 私の 心を鼓舞するそのようなことをしてほしい。 Javascriptは を eval()のおかげでJSONから簡単に変換できますが、JSONに変換するのはおそらく です。

このプラグインは$上に4つの新機能 を公開、またはjQueryオブジェクト:

  • toJSON:JSONにjavascriptオブジェクト、数値、文字列、またはARRYをシリアル化します。
  • evalJSON:JSONからJavascriptにすばやく変換され、些細なことです。
  • secureEvalJSONは:JSONからJavaScriptに変換しますが、そのソースがで投げ、他のJavascriptの文で、実際にJSONではなく、かどうかをチェックんが
  • quoteString:文字列の前後に引用符を置き、そしてinteligently任意の引用符をエスケープ、バックスラッシュ、または制御文字です。
+0

ありがとうございました。 –

+0

JSONはJavascriptのサブセットです.Javascriptオブジェクトに関数がある場合、JSONに格納することはできません。あなたがオブジェクトにハッシュ/配列/データだけを含んでいれば、JSONで十分です。 –

+0

json_decodeについてはどうですか? http://php.net/manual/en/function.json-decode.php –

3

なぜ、はい:jQuery's serialize。シリアル化を解除するには、関数を自分でコーディングする必要があります。具体的には、文字列を&に、次に=に分割する必要があります。

+0

ああ、それだけのフォーム上で動作します。もし私がこのようなjavascriptコードで作成した配列を直列化したいのであれば - var array = []; ? –

+0

あなたは正しいです、それはフォームでのみ動作します - 配列ではありません。それでも、2つのアップフォードのおかげで:) – 10goto10

2

私は、フォームをシリアル化し、それを保存しようとしていたため、ユーザーはそれアンシリアライズフォームに戻ってデータを再移植するとき。すでにこれを行うためのかなり甘いjQueryプラグインがあります:jQuery autosave。多分、これはあなたの一部を助けるでしょう。

0

私が投稿するjQueryの.serializeArrayを()使用していた、最近同じ問題を抱えていましたAJAX呼び出しによる検証用のフォームデータ。サーバー側では、私は、元の$ _POSTデータ構造を複製するだろう連想配列の中にダウンし、このオブジェクトを分割するために必要なので、私はこの小さな機能を書いた:あなたがしなければならないすべては、入力オブジェクトをキャストしその後

 
function unserializeMe($obj) { 
    $data = array(); 
    foreach($obj as $arr) { 
     $data[$arr['name']] = $arr['value']; 
    } 
    return $data; 
} 

をfuncitonコールでそれを渡す前に、配列型へ:

 
function createArray($rubble) { 
    $bricks = explode('&', $rubble); 

    foreach($bricks as $key => $value) { 
     $walls = preg_split('/=/', $value); 
     $built[$walls[0]] = $walls[1]; 
    } 

    return $built; 
} 
0

また、私はjQueryの.serialize()機能を解析する機能を書きましたsonallyクリスのような電子メール 『=>『私%40domain.com』があれば入ってくるであろうjQueryのシリアル化された文字列を処理するためのアンシリアライズ機能、しかし、のようなデータとしてサーバー側にもurldecode()それらを忘れないでください』この関数をそのまま使用します。

更新日:

function _unserializeJQuery($rubble = NULL) { 
    $bricks = explode('&', $rubble); 

    foreach ($bricks as $key => $value) { 
     $walls = preg_split('/=/', $value); 
     $built[urldecode($walls[0])] = urldecode($walls[1]); 
    } 

    return $built; 
} 
1

Iあたり:

 
$objData = (array) $_POST['data']; 
$data = unserializeMe($objData); 
0

使用機能parse_strを。あなたはネイティブライブラリを使用する必要がありますphp.net

1

$array = array(); 
$string = "title=Hello&desc=World=&s[]=5&s[]=6&s[]=7"; 

parse_str($string, $array); 

説明。 IEが8未満の場合は、CrockfordのJSON.jsも使用する必要があります。

1

"formdata"という変数に従って、サポートコードを見て、どのようにWordpress環境で動作させるかを確認してください。

私はクライアント側(JS)でこれを使用しています:

// bind button, setup and call .ajax 
jQuery('#submitbutton').click(function() { 
    jQuery('#response_area').html(''); 

    // put all name-values from form into one long string 
    var serializedformdata = jQuery('#submitform').serialize(); 

    // configure array of options for the ajax call (can use a different action for each form) 
    options = { 
     type: 'POST', 
     url: sv_submitform_global_js_vars.ajaxurl, 
     datatype: 'json', 
     data: { 
      clienttime: getnow(),  
      sv_submit_form_check: jQuery('#sv_submit_form_check').val(), 
      // this data:action:'value' is specifically required by the wordpress wp_ajax_<value> action hook to process the received data on the php/server side 
      action: 'sv_submitform_hook', 
      formdata: serializedformdata, 
      }, 
     beforeSend: beforesendfunc, 
     // process returned json formatted data in function named below 
     success: successfunc, 
    } 
    // execute the ajax call to server (sending data) 
    jQuery.ajax(options); 
}); 

...とサーバ側(PHP)で、これはバックアウトデータを取得し、サーバのための素晴らしい連想配列にしますサイドデータベース作業。

///////////////////////////////////// 
// ajax serverside data handler /// 
///////////////////////////////////// 

// Add AJAX actions for submit form 
// Serves logged in users 
add_action('wp_ajax_sv_submitform_hook', 'sv_submitform_handler'); 
// Serves non-logged in users 
add_action('wp_ajax_nopriv_sv_submitform_hook', 'sv_submitform_handler'); 


// this is the function that processes the input from the submit form 
function sv_submitform_handler(){ 
    date_default_timezone_set('EST'); 
    $servertime = date('h:i:s a').' Server Time'; 

    // fda = form data array can be used anywhere after the next statement. 
    // example: if ($fda['formfieldbyname'] == 'something'){...}; 
    parse_str($_POST['formdata'],$fda); 

    // this is how the nonce value is read 
    // form side is wp_nonce_field('sv_submitform','sv_submitform_check'); 
    if (!check_ajax_referer('sv_submitform', 'sv_submitform_check', false)){ 
      $data = $servertime . ' (Security Failed)'; 
     } else { 
      $data = $servertime . ' (Security Passed)'; 
     }; 
    $returndata = array('data' => $data); 

    exit(json_encode($returndata)); 
}; 

そしてそこにWordPressのコーダーのための、それはwp_ajax_フックがプラグインファイルや、私の子テーマのfunctions.phpのいずれかでなければならなかったことを実現するために私にしばらく時間がかかりました。通常のページテンプレートでは機能しません!

関連する問題