මට මෑතකදී එකම ගැටලුවක් ඇති වූ අතර එළියට ආවා මෙම .toJSON jQuery ප්ලගිනය අතර එය එකම ව්යුහයක් සහිත ආකෘති පත්රය JSON වස්තුවක් බවට පරිවර්තනය කරයි. ගතිකව ජනනය කරන ලද ආකෘති සඳහාද මෙය විශේෂයෙන් ප්රයෝජනවත් වේ, එහිදී ඔබට විශේෂිත ස්ථානවල තවත් ක්ෂේත්ර එකතු කිරීමට ඔබේ පරිශීලකයාට ඉඩ දිය යුතුය.
කාරණය වන්නේ ඔබට ඇත්ත වශයෙන්ම පෝරමයක් තැනීමට අවශ්ය නිසා එය ව්යුහයක් ඇති බැවින් පරිශීලකයා නගරයේ ඔහුගේ ප්රියතම ස්ථාන ඇතුළු කරන පෝරමයක් සෑදීමට ඔබට අවශ්ය යැයි කියමු: මෙම පෝරමය <places>...</places>
XML මූලද්රව්යයක් නියෝජනය කිරීමට ඔබට සිතාගත හැකිය පරිශීලකයා කැමති ස්ථාන ලැයිස්තුවක් මඟින් <place>...</place>
එක් එක් <name>...</name>
මූලද්රව්ය, <type>...</type>
මූලද්රව්යයක් සහ පසුව <activity>...</activity>
එවැනි ස්ථානයක ඔබට කළ හැකි ක්රියාකාරකම් නිරූපණය කිරීම සඳහා මූලද්රව්ය ලැයිස්තුවක් අඩංගු වේ. එබැවින් ඔබේ XML ව්යුහය මේ ආකාරයට වනු ඇත:
<places>
<place>
<name>Home</name>
<type>dwelling</type>
<activity>sleep</activity>
<activity>eat</activity>
<activity>watch TV</activity>
</place>
<place>...</place>
<place>...</place>
</places>
මෙම නිශ්චිත ව්යුහය නිරූපණය කරන JSON වස්තුවක් මෙයින් පිටතට ගෙන ඒම කෙතරම් සිසිල්ද, එවිට ඔබටද මෙය කළ හැකිය:
- මෙම වස්තුව ඕනෑම CouchDB හා සමාන දත්ත ගබඩාවක ඇති ආකාරයට ගබඩා කරන්න
- ඔබගේ $ _POST [] සේවාදායක පැත්තෙන් එය කියවා නිවැරදිව කැදැලි අරාව ලබා ගන්න එවිට ඔබට අර්ථාන්විතව හැසිරවිය හැකිය
- හොඳින් සකසන ලද XML ගොනුවක් බවට පරිවර්තනය කිරීම සඳහා සමහර සේවාදායක පාර්ශවීය ස්ක්රිප්ට් භාවිතා කරන්න (ඔබ එහි නිශ්චිත ව්යුහය a-priri නොදැන සිටියත්)
- ඕනෑම Node.js වැනි සේවාදායක ස්ක්රිප්ටයක ඇති ආකාරයට එය කෙසේ හෝ භාවිතා කරන්න
හරි, එබැවින් දැන් අප සිතිය යුත්තේ පෝරමයකට XML ගොනුවක් නිරූපණය කරන්නේ කෙසේද යන්නයි.
ඇත්ත වශයෙන්ම <form>
ටැගය යනු root
, නමුත් අපට එය තිබේ<place>
මූලද්රව්යය ඇත්තේ බහාලුමක් මිස දත්ත මූලද්රව්යයක් නොවේ, එබැවින් අපට ඒ සඳහා ආදාන ටැගයක් භාවිතා කළ නොහැක.
<fieldset>
ටැගය ප්රයෝජනවත් වන ස්ථානය මෙන්න ! අපි භාවිතා කරමු<fieldset>
අපගේ පෝරමයේ / එක්ස්එම්එල් නිරූපණයෙහි ඇති සියලුම බහාලුම් අංග නිරූපණය කිරීමට ටැග් , එබැවින් මෙවැනි ප්රති result ලයක් ලබා ගැනීම:
<form name="places">
<fieldset name="place">
<input type="text" name="name"/>
<select name="type">
<option value="dwelling">Dwelling</option>
<option value="restoration">Restoration</option>
<option value="sport">Sport</option>
<option value="administrative">Administrative</option>
</select>
<input type="text" name="activity"/>
<input type="text" name="activity"/>
<input type="text" name="activity"/>
</fieldset>
</form>
ඔබට මෙම පෝරමයේ දැකිය හැකි පරිදි, අපි අද්විතීය නම් වල රීතිය බිඳ දමමු, නමුත් මෙය හරි නිසා ඒවා මූලද්රව්ය සමූහයක් බවට පරිවර්තනය වනු ඇත, එබැවින් ඒවා යොමු කරනු ලබන්නේ අරාව තුළ ඇති ඔවුන්ගේ දර්ශකයෙන් පමණි.
මෙම අවස්ථාවේදී ඔබට නොපවතින ආකාරය දැක ගත හැකිය name="array[]"
, පෝරමය තුළ සමාන නමක් සහ සෑම දෙයක්ම ලස්සන, සරල හා අර්ථාන්විත බව .
දැන් අපට අවශ්ය වන්නේ මෙම පෝරමය JSON වස්තුවක් බවට පරිවර්තනය කිරීමයි.
{'places':{
'place':[
{
'name': 'Home',
'type': 'dwelling',
'activity':[
'sleep',
'eat',
'watch TV'
]
},
{...},
{...}
]
}}
මෙය සිදු කිරීම සඳහා මම මෙම jQuery ප්ලගිනය මෙහි සංවර්ධනය කර ඇති අතර මෙම කේත සමාලෝචන ත්රෙඩ් එකෙහි ප්රශස්තිකරණය කිරීමට යමෙකු උදව් කළ අතර මේ වගේ ය:
$.fn.toJSO = function () {
var obj = {},
$kids = $(this).children('[name]');
if (!$kids.length) {
return $(this).val();
}
$kids.each(function () {
var $el = $(this),
name = $el.attr('name');
if ($el.siblings("[name=" + name + "]").length) {
if (!/radio|checkbox/i.test($el.attr('type')) || $el.prop('checked')) {
obj[name] = obj[name] || [];
obj[name].push($el.toJSO());
}
} else {
obj[name] = $el.toJSO();
}
});
return obj;
};
මමත් මේ එක බ්ලොග් පෝස්ට් එකක් කළාමෙය තවත් පැහැදිලි කිරීම සඳහා .
මෙය සෑම දෙයක්ම ස්වරූපයෙන් JSON බවට පරිවර්තනය කරයි (ගුවන්විදුලිය සහ චෙක් පෙට්ටි පවා) ඔබට කිරීමට ඉතිරිව ඇත්තේ ඇමතුම පමණි
$.post('script.php',('form').toJSO(), ...);
ආකෘති JSON වස්තු බවට පරිවර්තනය කිරීමට බොහෝ ක්රම ඇති බව මම දනිමි . බොහෝ අවස්ථාවන්හිදී එය නිසැකවම .serialize()
හා .serializeArray()
හොඳින් ක්රියාත්මක වන අතර ඒවා බොහෝ දුරට භාවිතා කිරීමට අදහස් කර ඇත, නමුත් අර්ථවත් නම් සහිත XML ව්යුහයක් ලෙස පෝරමයක් ලිවීම සහ එය a බවට පරිවර්තනය කිරීමේ මෙම සම්පූර්ණ අදහසම මම සිතමි . හොඳින් සාදන ලද JSON වස්තුව උත්සාහ කිරීම වටී, එසේම ඔබට ගතිකව ජනනය කරන ලද ආකෘති දත්ත නැවත ලබා ගැනීමට අවශ්ය නම් කරදර නොවී එකම නම ආදාන ටැග් එක් කළ හැකිය.
මම හිතනවා මේක කෙනෙකුට උදව් කරයි කියලා!