আমি কিছুক্ষণের জন্য স্বীকৃত উত্তরের কোড (ফিলিপের কোড) ব্যবহার করছি এবং এটি দুর্দান্ত কাজ করছে (ধন্যবাদ, ফিলিপ!)।
তবে সম্প্রতি আমি আবিষ্কার করেছি যে এটিতে খালি জিনিস বা অ্যারে নিয়ে সমস্যা রয়েছে। উদাহরণস্বরূপ, এই বস্তুটি জমা দেওয়ার সময়:
{
A: 1,
B: {
a: [ ],
},
C: [ ],
D: "2"
}
পিএইচপি মোটেও বি এবং সি দেখে বলে মনে হচ্ছে না। এটি এটি পায়:
[
"A" => "1",
"B" => "2"
]
ক্রোমে আসল অনুরোধের দিকে নজর দেওয়া এটি দেখায়:
A: 1
:
D: 2
আমি একটি বিকল্প কোড স্নিপেট লিখেছি। এটি আমার ব্যবহারের ক্ষেত্রে ভালভাবে কাজ করছে বলে মনে হচ্ছে তবে আমি এটির ব্যাপকভাবে পরীক্ষা করিনি তাই সতর্কতার সাথে ব্যবহার করুন।
আমি টাইপস্ক্রিপ্ট ব্যবহার করেছি কারণ আমার দৃ strong় টাইপিং পছন্দ হয় তবে খাঁটি জেএসে রূপান্তর করা সহজ হবে:
angular.module("MyModule").config([ "$httpProvider", function($httpProvider: ng.IHttpProvider) {
// Use x-www-form-urlencoded Content-Type
$httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
function phpize(obj: Object | any[], depth: number = 1): string[] {
var arr: string[] = [ ];
angular.forEach(obj, (value: any, key: string) => {
if (angular.isObject(value) || angular.isArray(value)) {
var arrInner: string[] = phpize(value, depth + 1);
var tmpKey: string;
var encodedKey = encodeURIComponent(key);
if (depth == 1) tmpKey = encodedKey;
else tmpKey = `[${encodedKey}]`;
if (arrInner.length == 0) {
arr.push(`${tmpKey}=`);
}
else {
arr = arr.concat(arrInner.map(inner => `${tmpKey}${inner}`));
}
}
else {
var encodedKey = encodeURIComponent(key);
var encodedValue;
if (angular.isUndefined(value) || value === null) encodedValue = "";
else encodedValue = encodeURIComponent(value);
if (depth == 1) {
arr.push(`${encodedKey}=${encodedValue}`);
}
else {
arr.push(`[${encodedKey}]=${encodedValue}`);
}
}
});
return arr;
}
// Override $http service's default transformRequest
(<any>$httpProvider.defaults).transformRequest = [ function(data: any) {
if (!angular.isObject(data) || data.toString() == "[object File]") return data;
return phpize(data).join("&");
} ];
} ]);
এটি ফিলিপের কোডের চেয়ে কম দক্ষ তবে আমার মনে হয় না যে এটি HTTP অনুরোধের সামগ্রিক ওভারহেডের সাথে তাত্ক্ষণিকভাবে হওয়া উচিত since
এখন পিএইচপি দেখায়:
[
"A" => "1",
"B" => [
"a" => ""
],
"C" => "",
"D" => "2"
]
যতদূর আমি জানি যে পিএইচপি পাওয়া যে বা ও সি খালি অ্যারে রয়েছে তা সনাক্ত করা সম্ভব নয়, তবে কমপক্ষে কীগুলি উপস্থিত হয়, যা গুরুত্বপূর্ণ যখন নির্দিষ্ট কোডের উপর নির্ভর করে তখনও এটির প্রয়োজনীয়তা খালি ভিতরে থাকে।
এছাড়াও মনে রাখবেন এটি পরিবর্তন করে অনির্ধারিত s এবং নাল গুলি স্ট্রিং খালি করতে।