উপরের সমাধানগুলির কোনওটিই কেবল jQuery দিয়ে গভীর নেস্টেড প্যারামগুলি পরিচালনা করেন না, তাই এখানে আমার দুটি সেন্ট সমাধান রয়েছে।
আপনি যদি jQuery ব্যবহার করছেন এবং আপনার গভীর নেস্টেড প্যারামিটারগুলি পরিচালনা করতে হবে তবে আপনি নীচে এই ফাংশনটি ব্যবহার করতে পারেন:
/**
* Original code found here: https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
* I just simplified it for my own taste.
*/
function postForm(parameters, url) {
// generally we post the form with a blank action attribute
if ('undefined' === typeof url) {
url = '';
}
//----------------------------------------
// SOME HELPER FUNCTIONS
//----------------------------------------
var getForm = function (url, values) {
values = removeNulls(values);
var form = $('<form>')
.attr("method", 'POST')
.attr("action", url);
iterateValues(values, [], form, null);
return form;
};
var removeNulls = function (values) {
var propNames = Object.getOwnPropertyNames(values);
for (var i = 0; i < propNames.length; i++) {
var propName = propNames[i];
if (values[propName] === null || values[propName] === undefined) {
delete values[propName];
} else if (typeof values[propName] === 'object') {
values[propName] = removeNulls(values[propName]);
} else if (values[propName].length < 1) {
delete values[propName];
}
}
return values;
};
var iterateValues = function (values, parent, form, isArray) {
var i, iterateParent = [];
Object.keys(values).forEach(function (i) {
if (typeof values[i] === "object") {
iterateParent = parent.slice();
iterateParent.push(i);
iterateValues(values[i], iterateParent, form, Array.isArray(values[i]));
} else {
form.append(getInput(i, values[i], parent, isArray));
}
});
};
var getInput = function (name, value, parent, array) {
var parentString;
if (parent.length > 0) {
parentString = parent[0];
var i;
for (i = 1; i < parent.length; i += 1) {
parentString += "[" + parent[i] + "]";
}
if (array) {
name = parentString + "[" + name + "]";
} else {
name = parentString + "[" + name + "]";
}
}
return $("<input>").attr("type", "hidden")
.attr("name", name)
.attr("value", value);
};
//----------------------------------------
// NOW THE SYNOPSIS
//----------------------------------------
var generatedForm = getForm(url, parameters);
$('body').append(generatedForm);
generatedForm.submit();
generatedForm.remove();
}
এটি কীভাবে ব্যবহার করতে হয় তার একটি উদাহরণ এখানে। এইচটিএমএল কোড:
<button id="testButton">Button</button>
<script>
$(document).ready(function () {
$("#testButton").click(function () {
postForm({
csrf_token: "abcd",
rows: [
{
user_id: 1,
permission_group_id: 1
},
{
user_id: 1,
permission_group_id: 2
}
],
object: {
apple: {
color: "red",
age: "23 days",
types: [
"golden",
"opal",
]
}
},
the_null: null, // this will be dropped, like non-checked checkboxes are dropped
});
});
});
</script>
এবং আপনি যদি পরীক্ষার বোতামটি ক্লিক করেন তবে এটি ফর্মটি পোস্ট করবে এবং আপনি পোস্টে নিম্নলিখিত মানগুলি পাবেন:
array(3) {
["csrf_token"] => string(4) "abcd"
["rows"] => array(2) {
[0] => array(2) {
["user_id"] => string(1) "1"
["permission_group_id"] => string(1) "1"
}
[1] => array(2) {
["user_id"] => string(1) "1"
["permission_group_id"] => string(1) "2"
}
}
["object"] => array(1) {
["apple"] => array(3) {
["color"] => string(3) "red"
["age"] => string(7) "23 days"
["types"] => array(2) {
[0] => string(6) "golden"
[1] => string(4) "opal"
}
}
}
}
দ্রষ্টব্য: আপনি যদি বর্তমান পৃষ্ঠার চেয়ে অন্য url এ ফর্মটি পোস্ট করতে চান তবে আপনি url পোস্টফর্ম ফাংশনের দ্বিতীয় যুক্তি হিসাবে উল্লেখ করতে পারেন।
সুতরাং উদাহরণস্বরূপ (আপনার উদাহরণটি আবার ব্যবহার করতে):
postForm({'q':'a'}, 'http://example.com/');
আশাকরি এটা সাহায্য করবে.
নোট 2: কোডটি পুনঃনির্দেশ প্লাগইন থেকে নেওয়া হয়েছিল । আমি মূলত এটি আমার প্রয়োজনের জন্য সহজ করেছিলাম।