আমি ইদানীং একই সমস্যা ছিল এবং সাথে বেরিয়ে এসেছি এই .toJSON jQuery প্লাগইনটি যা কোনও ফর্মকে একই কাঠামোর সাথে একটি JSON অবজেক্টে রূপান্তর করে। এটি গতিশীল উত্পাদিত ফর্মগুলির জন্যও বিশেষভাবে কার্যকর যেখানে আপনি আপনার ব্যবহারকারীকে নির্দিষ্ট জায়গায় আরও ক্ষেত্র যুক্ত করতে চান।
মুল বক্তব্যটি হ'ল আপনি সম্ভবত একটি ফর্ম তৈরি করতে চান যাতে এটির নিজস্ব কাঠামো থাকে, সুতরাং আসুন আপনি একটি ফর্ম তৈরি করতে চান যেখানে ব্যবহারকারী শহরে তার পছন্দের জায়গাগুলি সন্নিবেশ করান: আপনি এই ফর্মটি কোনও <places>...</places>
এক্সএমএল উপাদানযুক্ত একটি প্রতিনিধিত্ব করতে কল্পনা করতে পারেন ব্যবহারকারীদের যে জায়গাগুলি পছন্দ করে তাদের তালিকার তালিকায় <place>...</place>
প্রতিটি <name>...</name>
উপাদান যেমন একটি উপাদান, একটি <type>...</type>
উপাদান এবং তারপরে একটি তালিকা রয়েছে তার তালিকা করে<activity>...</activity>
এমন কোনও স্থানে আপনি যে ক্রিয়াকলাপ সম্পাদন করতে পারবেন তার প্রতিনিধিত্ব করার উপাদানগুলির । সুতরাং আপনার এক্সএমএল কাঠামোটি এরকম হবে:
<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 অবজেক্ট পাওয়া যায় যা এই সঠিক কাঠামোর প্রতিনিধিত্ব করে তবে আপনি যে কোনওটি করতে সক্ষম হবেন:
- এই বস্তুটি যেমন কোনও কাউচডিবি- সদৃশ ডাটাবেসে রয়েছে তেমন সংরক্ষণ করুন
- এটি আপনার $ _POST [] সার্ভার পাশ থেকে পড়ুন এবং সঠিকভাবে নেস্টেড অ্যারে পুনরুদ্ধার করুন যারপরে আপনি শব্দার্থিকভাবে ম্যানিপুলেট করতে পারবেন
- এটিকে একটি সুগঠিত এক্সএমএল ফাইলে রূপান্তর করতে কিছু সার্ভার-সাইড স্ক্রিপ্ট ব্যবহার করুন (এমনকি যদি আপনি এর সঠিক কাঠামোটি প্রাক-প্রাইরি নাও জানেন)
- এটি কোনও নোড.জেএস- সদৃশ সার্ভার স্ক্রিপ্টে যেমন আছে তেমনই ব্যবহার করুন
ঠিক আছে, সুতরাং এখন আমাদের ভাবতে হবে যে কোনও ফর্ম কীভাবে একটি এক্সএমএল ফাইল উপস্থাপন করতে পারে।
অবশ্যই <form>
ট্যাগটি হ'ল root
তবে তারপরে আমাদের কাছে সেই <place>
উপাদানটি রয়েছে যা একটি ধারক এবং নিজেই কোনও ডেটা উপাদান নয়, তাই আমরা এর জন্য একটি ইনপুট ট্যাগ ব্যবহার করতে পারি না।
<fieldset>
ট্যাগটি হাতে আসে এখানে ! আমরা <fieldset>
আমাদের ফর্ম / এক্সএমএল উপস্থাপনায় সমস্ত ধারক উপাদান উপস্থাপন করতে এবং এর ফলে ফলাফল পেতে ট্যাগ ব্যবহার করব :
<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()
দুর্দান্ত কাজ করে এবং বেশিরভাগ ক্ষেত্রেই এটি ব্যবহারের উদ্দেশ্যে থাকে, তবে আমি মনে করি অর্থপূর্ণ নাম সহ এক্সএমএল কাঠামো হিসাবে একটি ফর্ম লেখার এবং এটি একটি রূপান্তর করার এই পুরো ধারণাটি সুগঠিত জেএসওএন অবজেক্টটি চেষ্টা করার মতো, এছাড়াও আপনি যদি চিন্তিত না হয়ে একই নাম ইনপুট ট্যাগ যুক্ত করতে পারেন তবে আপনার যদি গতিশীলভাবে উত্পন্ন ফর্ম ডেটা পুনরুদ্ধার করতে হয় তবে এটি দরকারী is
আমি আশা করি এটা কারো সাহায্যে লাগবে!