JQuery serialize / unserialize PHP fonksiyonları gibi bir şey var mı?
Bu fonksiyonlar bir dizi ya da daha geriye dizi / nesne içine deşifre edilebilir bir nesnenin dize temsilini döndürür.
jQuery 'serialize / serializeArray sadece form elemanları için çalışıyor. Bunu gibi daha genel bir şey arıyorsanız düşünüyorum:
http://code.google.com/p/jquery-json/
Bu eklenti ve JSON dönüştürmek için basit yapar:
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
Most people asked me why I would want to do such a thing, which boggles my mind. Javascript makes it relatively easy to convert from JSON, thanks to eval(), but converting to JSON is supposedly an edge requirement.
This plugin exposes four new functions onto the $, or jQuery object:
toJSON
: bir javascript nesne, sayı, dize veya JSON Arry Serializes.evalJSON
: hızlı, JSON JavaScript dönüştürür, ve saçmadır.secureEvalJSON
: JSON Javascript dönüştürür, ancak kaynak aslında JSON olup olmadığını görmek için kontrol, ve o kadar da yapar atılmış diğer Javascript deyimleri ilequoteString
: bir dize tırnak Mekanlar ve inteligently herhangi bir alıntı, eğik çizgi, ya da kontrol karakterleri kaçar.
Neden, evet: jQuery's serialize. Unserialize için, esentially & 's ve daha sonra =' s dize bölme, bir fonksiyonunu kendiniz kod gerekiyor.
Ben bir formu serialize ve sonra kaydetmek için çalışıyor ve kullanıcı forma geri döndüğünde onu unserialize ve verileri yeniden doldurmak oldu. jQuery autosave:. Zaten orada bu iş için bir tatlı jQuery eklentisi çıkıyor Belki bu size biraz yardımcı olacaktır.
Ben bir AJAX çağrısı ile doğrulama için form verilerini göndermek için jQuery'nin. SerializeArray () kullanıyordum, son zamanlarda aynı problem vardı. Sunucu tarafında ben orijinal $ _POST veri yapısını çoğaltmak istiyorum bir ilişkisel diziye aşağı bu nesneyi ayırmak için gereklidir, bu yüzden bu küçük işlevi yazdı:
function unserializeMe($obj) { $data = array(); foreach($obj as $arr) { $data[$arr['name']] = $arr['value']; } return $data; }
Sonra yapmanız gereken tüm funciton çağrısı geçirmeden önce bir dizi tipine giriş nesne artığını olduğunu:
$objData = (array) $_POST['data']; $data = unserializeMe($objData);
Ben şahsen Chris'in benim gibi% 40domain.com 'geliyor olacak email' => 'jQuery'nin tefrika dizeleri işlemek için unserialize işlevi, ancak, gibi veri olarak sunucu tarafında da urldecode () bunları unutma' Eğer işlevini kullanmak gibi-olduğunu.
Güncelleme:
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;
}
Kullanım fonksiyonu parse_str.
$array = array();
$string = "title=Hello&desc=World=&s[]=5&s[]=6&s[]=7";
parse_str($string, $array);
php.net üzerine açıklama
Ben henüz oy için yeterli "itibar" var, ama, hepsi özellikle "Kostya" ve "Chris" teşekkür etmek istemiyorum, aydınlanma için bu konu sağladı!
Değişkeni "formdata" izleyin ve ben bir wordpress ortamda çalışmak için bu var nasıl görmek için destekleyici koda bakmak.
Ben clientside (js) bu kullanıyorum:
// 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);
});
... Ve bu dışarı geri ve sunucu tarafı veritabanı iş için güzel ilişkisel diziye veri almak için sunucu tarafında (php) hakkında.
/////////////////////////////////////
// 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));
};
Ve orada wordpress kodlayıcılar için, bu wp_ajax_ kanca bir eklenti dosya veya çocuğumun temanın functions.php biriyle olmak zorunda olduğunu anlamam biraz zaman aldı. Bu normal bir sayfa şablonunda çalışmaz! Ben bu kimse yardımcı olur ve benim "itibar" bir nokta ya da iki yetişir umuyoruz.