ඉහත විසඳුම් කිසිවක් ගැඹුරු කැදැලි පරාමිතීන් 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();
}
මෙන්න එය භාවිතා කරන ආකාරය පිළිබඳ උදාහරණයක්. HTML කේතය:
<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>
ඔබ පරීක්ෂණ බොත්තම ක්ලික් කළහොත්, එය පෝරමය පළ කරනු ඇති අතර ඔබට පහත සඳහන් අගයන් POST හි ලැබෙනු ඇත:
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"
}
}
}
}
සටහන: ඔබට වර්තමාන පිටුවට වඩා වෙනත් යූආර්එල් වෙත පෝරමය පළ කිරීමට අවශ්ය නම්, ඔබට පෝස්ට්ෆෝම් ශ්රිතයේ දෙවන තර්කය ලෙස යූආර්එල් නියම කළ හැකිය.
උදාහරණයක් ලෙස (ඔබේ උදාහරණය නැවත භාවිතා කිරීමට):
postForm({'q':'a'}, 'http://example.com/');
මෙය උපකාරී වේ යැයි සිතමි.
සටහන 2: කේතය යළි-යොමුවීමේ ප්ලගිනයෙන් ලබාගෙන ඇත. මම මූලික වශයෙන් එය මගේ අවශ්යතා සඳහා සරල කළෙමි.