জাভাস্ক্রিপ্ট দিয়ে কীভাবে স্ট্রিং তৈরি করবেন


167

জাভাস্ক্রিপ্টে অন্তর্নির্মিত এমন কোনও কিছু রয়েছে যা একটি ফর্ম নিতে এবং ক্যোয়ারীর প্যারামিটারগুলি ফেরত দিতে পারে, তা কেবল ভাবছেন: "var1=value&var2=value2&arr[]=foo&arr[]=bar..."

আমি বছরের পর বছর ধরে এই ভাবছি।


1
এফওয়াইআই: phpjs.org/funitions/http_build_query

উত্তর:


-24

আমি কিছুক্ষণ আগে এই প্রশ্নের উত্তর অনুসন্ধান করার চেষ্টা করেছি, তবে আমি নিজের ফাংশনটি লিখে ফর্মটি থেকে ফর্মটি থেকে মানগুলি বের করেছিলাম ..

এটি নিখুঁত নয় তবে এটি আমার প্রয়োজনের সাথে খাপ খায়।

function form_params( form )
{
    var params = new Array()
    var length = form.elements.length
    for( var i = 0; i < length; i++ )
    {
        element = form.elements[i]

        if(element.tagName == 'TEXTAREA' )
        {
            params[element.name] = element.value
        }
        else if( element.tagName == 'INPUT' )
        {
            if( element.type == 'text' || element.type == 'hidden' || element.type == 'password')
            {
                params[element.name] = element.value
            }
            else if( element.type == 'radio' && element.checked )
            {
                if( !element.value )
                    params[element.name] = "on"
                else
                    params[element.name] = element.value

            }
            else if( element.type == 'checkbox' && element.checked )
            {
                if( !element.value )
                    params[element.name] = "on"
                else
                    params[element.name] = element.value
            }
        }
    }
    return params;
}

form_params পরামিতিগুলির একটি (কী -> মান) ম্যাপিং দেয়। ইনপুট হ'ল ফর্ম এলিমেন্ট (DOM এলিমেন্ট)

এটি এমন ক্ষেত্রগুলি পরিচালনা করে না যা একাধিক নির্বাচনের অনুমতি দেয়।


44
এটি কি কেবল আমিই বা এ প্রশ্নের কোনও উত্তরই দেয় না? তিনি ম্যাপযুক্ত অ্যারে নয়, কোয়েরি স্ট্রিংয়ের জন্য জিজ্ঞাসা করছিলেন।
জেক উইলসন

2
@ জ্যাকউইলসন হ্যাঁ, এই উত্তরটি অর্ধেক প্রশ্নের উত্তর দেয়। অ্যারে এখনও একটি কোয়েরি স্ট্রিং ফর্ম্যাটে intoোকা দরকার।
হ্যাচ মুর

9
বাহ আমি তখন জেএসে নুবু হয়ে গেছি। new Array()একটি অভিধান আরম্ভ করার জন্য ব্যবহার করে । তবে আবার, কোডটি এই দিনগুলিতে লিখতে হবে এমন কিছু বাজে কথাটির চেয়ে অনেক বেশি পরিষ্কার দেখাচ্ছে!
হাসেন

2
@ হাসেন হয়ত আপনি এই উত্তরটি সম্পাদনা বিবেচনা করবেন, বা, ভাল, এটি মুছবেন? প্রতিবার আমি এটিতে স্ক্রোল করলে এটি আরও কম-বেশি ডাউনওয়েট থাকে = -D (এমনকি এটির ইতিবাচক অনুপাতের
সময়টিও

1
@ আর্টারক্লেসুন হ্যাঁ, না। আমি পাত্তা দিই না। আপনি যে প্রশ্নটি জিজ্ঞাসা করেছেন তাকে এই উত্তরটি গ্রহণ না করে জিজ্ঞাসা করার চেষ্টা করতে পারেন।
হাসেন

220

2k20 আপডেট: URLS SearchParams.toString () এর সাথে জোশের সমাধানটি ব্যবহার করুন ।

পুরানো উত্তর:


JQuery ছাড়া

var params = {
    parameter1: 'value_1',
    parameter2: 'value 2',
    parameter3: 'value&3' 
};

var esc = encodeURIComponent;
var query = Object.keys(params)
    .map(k => esc(k) + '=' + esc(params[k]))
    .join('&');

যে ব্রাউজারগুলিতে তীর ফাংশন সিনট্যাক্স সমর্থন করে না যার জন্য ES5 প্রয়োজন, .map...লাইনটি এতে পরিবর্তন করুন

    .map(function(k) {return esc(k) + '=' + esc(params[k]);})

8
আমি এখনও দেখা সেরা সমাধান - খুব পরিষ্কার এবং সংক্ষিপ্ত। যদিও বেশ কয়েকটা সতর্কীকরণ। 1) .map () এ, উভয় কে এবং প্যারাম [কে] এনকোড করা উচিত, উদাহরণস্বরূপ এনকোডিউআরআইকিউম্পোনমেন্ট (কে) এবং এনকোডিউআরআইসি কম্পোনেন্ট (প্যারাম [কে])। 2) আপনার কাছে ক্যোয়ারী স্ট্রিংয়ে নামকরণের প্যারামিটারের একাধিক উদাহরণ থাকতে পারে। আপনি যদি সেই ক্ষমতাটি চান তবে আপনাকে কোনও অবজেক্টের পরিবর্তে একটি অ্যারে ব্যবহার করতে হবে (বেশিরভাগ অ্যাপ্লিকেশনগুলির প্রয়োজন হবে না বা প্রয়োজন হবে না)।
জন দেইঘান

9
3) সমস্ত ব্রাউজারগুলি তীর ফাংশন সিনট্যাক্সকে সমর্থন করবে না (এর জন্য ES5 প্রয়োজন)। আপনি যদি সমস্ত ব্রাউজারগুলি সমর্থন করতে চান (এবং অংশগুলি এনকোড করুন), উপরের।
জন দেইঘান

1
সুন্দর। সত্যি সুন্দর.
মিক্কো ওহতামা

9
"পর্যাপ্ত jquery নয়"
ইউজিন পানকভ

1
@ ব্যবহারকারী1738579 আমি উত্তরটি সম্পাদনা করেছি যাতে নন-ইএস 5 এর জন্য আপনার উদাহরণ অন্তর্ভুক্ত করা যায়।
টেলর এডমিস্টন

134

আপনি যদি jQuery ব্যবহার করে থাকেন তবে আপনি http://api.jquery.com/jQuery.param/ চেক করতে পারেনjQuery.param()

উদাহরণ:

var params = {
    parameter1: 'value1',
    parameter2: 'value2',
    parameter3: 'value3' 
};
var query = $.param(params);
document.write(query);

13
এটি আসলে সঠিক উত্তর! একটি ফর্মের জন্য ক্যোরিয় স্ট্রিং $.param($('#myform').serializeArray())
জেসি

7
@ জেসি, এটি একই ফলাফল হবে:$('#myform').serialize()
ক্লিভার

94
jQuery !== JavaScript
gphilip

14
@ জিফিলিপ ওয়েল এজন্য আমি "আপনি যদি jQuery ব্যবহার করছেন ..." দিয়ে প্রতিক্রিয়া শুরু করেছি। অন্যথায় যদি আপনি ভ্যানিলা জেএস এ এটি প্রয়োগ করতে চান তবে আপনি jQuery.param()এখানে github.com/jquery/jquery/blob/master/src/seialize.js এর বাস্তবায়ন পরীক্ষা করতে পারেন :)
ক্লেন টুয়ার

2
আমার উত্তরের বিপরীতে এটি একটি নেস্টেড বস্তুগুলিকে সমর্থন করেsomeStr=value1&someObj[a]=5&someObj[b]=6&someArr[]=1&someArr[]=2
ক্লেসুন

113

ইউআরএল সার্চপ্যারাম এপিআই সমস্ত আধুনিক ব্রাউজারে উপলব্ধ। উদাহরণ স্বরূপ:

const params = new URLSearchParams({
  var1: "value",
  var2: "value2",
  arr: "foo",
});
console.log(params.toString());
//Prints "var1=value&var2=value2&arr=foo"


3
ইমো সেরা উত্তর। এটিতে যুক্ত করতে, আপনি params.append(key, value)আরও জটিল পরিস্থিতিতে নতুন অনুসন্ধান প্যারাম যুক্ত করার জন্য পরে করতে পারেন ।
মিংওয়ে ঝাং

4
নোট করুন যে x=null&y=undefined
অপরিজ্ঞাত

2
এছাড়াও, আপনার যদি ইতিমধ্যে কোনও ইউআরএল অবজেক্ট থাকে (উদাহরণস্বরূপ const url = new URL("https://stackoverflow.com")), আপনি এর ক্যোয়ারী স্ট্রিংগুলি সেট করতে পারেন url.search = new URLSearchParams({foo: "bar"})বাurl.searchParams.append("foo", "bar")
মিগুয়েল পাইন্টো

নোট করুন যে টিএস একটি সরল অবজেক্ট ব্যবহার সম্পর্কে সতর্ক করবে, তবে এটি
ঠিকঠাকভাবে

@ পমবার এই অপরিশোধিত আইটেমগুলি ফিল্টার করার জন্য কোনও ভাল ধারণা?
ড্যান গেইল

53

এটি সরাসরি আপনার প্রশ্নের উত্তর দেয় না, তবে এখানে একটি জেনেরিক ফাংশন রয়েছে যা একটি ইউআরএল তৈরি করবে যাতে ক্যোয়ারিং স্ট্রিং পরামিতি রয়েছে। প্যারামিটারগুলি (নাম এবং মান) নিরাপদে কোনও ইউআরএল অন্তর্ভুক্তির জন্য পালিয়ে যায়।

function buildUrl(url, parameters){
  var qs = "";
  for(var key in parameters) {
    var value = parameters[key];
    qs += encodeURIComponent(key) + "=" + encodeURIComponent(value) + "&";
  }
  if (qs.length > 0){
    qs = qs.substring(0, qs.length-1); //chop off last "&"
    url = url + "?" + qs;
  }
  return url;
}

// example:
var url = "http://example.com/";

var parameters = {
  name: "George Washington",
  dob: "17320222"
};

console.log(buildUrl(url, parameters));
// => http://www.example.com/?name=George%20Washington&dob=17320222

1
Jquery, mootools, ইত্যাদির মতো জনসাধারণের জাভাস্ক্রিপ্ট ফ্রেমওয়ার্কগুলির মধ্যে এটির মতো কোনও বিল্ট-ইন ফাংশন রয়েছে কি ...?
স্যামুয়েল 19

আরো শক্তসমর্থ নেটিভ জাভাস্ক্রিপ্ট সমাধান হয় stackoverflow.com/a/1714899/1269037
ড্যান Dascalescu

আজও অদ্ভুত বাস্তবায়ন, new Arrayআপনি আসলে যখন এটি একটি অবজেক্ট হিসাবে ব্যবহার করেন তখন আপনাকে কেন কিছুক্ষণ আরম্ভ করতে হবে? ও, ও
উমুত সিরিন

@ উমূতসিরিন লোল হ্যাঁ আমি তখন জাভাস্ক্রিপ্ট সম্পর্কে খুব বেশি জানতাম না। xD আমি মনে করি যে আমি এটি পিএইচপি অ্যারের মতো আচরণ করছিলাম। আপনি চাইলে নির্দ্বিধায় রিফ্যাক্টর করুন।
মাইকেল

@ মিশেল হা হা, হ্যাঁ আমি সবেমাত্র একটি সম্পাদনা পাঠিয়েছি। উত্তরের জন্য ধন্যবাদ!
উমুত সিরিন

22

JQuery এর সাহায্যে আপনি এটি দ্বারা এটি করতে পারেন $.param

$.param({ action: 'ship', order_id: 123, fees: ['f1', 'f2'], 'label': 'a demo' })

// -> "action=ship&order_id=123&fees%5B%5D=f1&fees%5B%5D=f2&label=a+demo"

17

ES2017 (ES8)

ব্যবহার করা Object.entries(), যা বস্তুর জোড়গুলির একটি অ্যারের প্রদান করে [key, value]। উদাহরণস্বরূপ, {a: 1, b: 2}এটির জন্য ফিরে আসবে [['a', 1], ['b', 2]]। এটি কেবল আইই দ্বারা সমর্থিত নয় (এবং হবে না)।

কোড:

const buildURLQuery = obj =>
      Object.entries(obj)
            .map(pair => pair.map(encodeURIComponent).join('='))
            .join('&');

উদাহরণ:

buildURLQuery({name: 'John', gender: 'male'});

ফলাফল:

"name=John&gender=male"

এর পরিবর্তে url.spec.whatwg.org/#urlsearchparams ব্যবহার করুন
বোরিস

10

না, আমি মনে করি না যে স্ট্যান্ডার্ড জাভাস্ক্রিপ্টটি এতে অন্তর্নির্মিত রয়েছে, তবে প্রোটোটাইপ জেএসের সেই ফাংশন রয়েছে (অবশ্যই অন্যান্য জেএস ফ্রেমওয়ার্কগুলিতেও রয়েছে, তবে আমি সেগুলি জানি না), তারা এটিকে সিরিয়াল হিসাবে ডাকে ।

আমি প্রোটোটাইপ জেএস পুনরুদ্ধার করতে পারি, এটি বেশ ঠিক আছে। একমাত্র ত্রুটি আমি সত্যিই এটির আকার (কয়েকশ কেবি) এবং স্কোপটি লক্ষ্য করেছি (এজ্যাক্স, ডোম ইত্যাদির জন্য প্রচুর কোড)। সুতরাং আপনি যদি কেবলমাত্র কোনও ফর্ম সিরিয়ালাইজার চান তবে এটি অতিরিক্ত পরিমাণে, এবং যদি আপনি কেবল এটি অ্যাজাক্স কার্যকারিতা চান (তবে মূলত যা আমি এটির জন্য ব্যবহার করেছি) এটি ওভারকিল। আপনি যদি সাবধান না হন তবে আপনি দেখতে পাবেন যে এটি কিছুটা "ম্যাজিক" করে (যেমন প্রতিটি ডোম উপাদানকে প্রোটোটাইপ জেএস ফাংশনগুলির সাথে স্পর্শ করে কেবল উপাদানগুলি খুঁজে বের করে) চরম ক্ষেত্রে এটি ধীর করে দেয়।


কেবল বিল্ট-ইন কিছু আছে কিনা তা ভাবছি। মনে হয় সেখানে হওয়া উচিত। আমি প্রোটোটাইপকে ঘৃণা করি, তবে আমি তা আপনার বিরুদ্ধে রাখছি না :)

যখন জাভাস্ক্রিপ্টটি ডিজাইন করা হয়েছিল, তখন এখনও অ্যাজাক্স সন্ধান করা হয়নি, কেবল ক্যোরিস্ট্রিংয়ের জন্য একটি ফর্ম পার্সিং করা (এটি জমা দেওয়ার সময় এটি নিজেই তৈরি হবে) সম্ভবত খুব বেশি অর্থবহ হয়নি। আজ এটা আছে, শক্ত ... BTW, script.aculo.us তুলনায় প্রোটোটাইপ চমৎকার । :)
স্টেইন জি। স্ট্রিন্ডাগ

10

ক্যোয়ারস্ট্রিং সাহায্য করতে পারে।

তাই আপনি পারেন

const querystring = require('querystring')

url += '?' + querystring.stringify(parameters)


@ রবার্টপ্যাঙ্কোয়েকি, হ্যাঁ, কিউএস আরও ভাল এবং ইতিমধ্যে আমার অস্ত্রাগারে, চিয়ার্স!
ইমলিও

6

আপনি যদি কোনও লাইব্রেরি ব্যবহার করতে না চান, তবে এটি বেশিরভাগ / একই আকারের উপাদান ধরণের উচিত।

function serialize(form) {
  if (!form || !form.elements) return;

  var serial = [], i, j, first;
  var add = function (name, value) {
    serial.push(encodeURIComponent(name) + '=' + encodeURIComponent(value));
  }

  var elems = form.elements;
  for (i = 0; i < elems.length; i += 1, first = false) {
    if (elems[i].name.length > 0) { /* don't include unnamed elements */
      switch (elems[i].type) {
        case 'select-one': first = true;
        case 'select-multiple':
          for (j = 0; j < elems[i].options.length; j += 1)
            if (elems[i].options[j].selected) {
              add(elems[i].name, elems[i].options[j].value);
              if (first) break; /* stop searching for select-one */
            }
          break;
        case 'checkbox':
        case 'radio': if (!elems[i].checked) break; /* else continue */
        default: add(elems[i].name, elems[i].value); break;
      }
    }
  }

  return serial.join('&');
}

ধন্যবাদ! আমি কেবল আসল পোস্টার হিসাবে একই সমস্যার মুখোমুখি হয়েছিলাম এবং আপনার ফাংশনটি আমার প্রয়োজন মতো ছিল।
dagw

4

প্রোটোটাইপ দিয়ে এটি করার জন্য আপনার আসলে কোনও ফর্মের দরকার নেই। কেবল অবজেক্ট. টুকিউরি স্ট্রিং ফাংশনটি ব্যবহার করুন :

Object.toQueryString({ action: 'ship', order_id: 123, fees: ['f1', 'f2'], 'label': 'a demo' })

// -> 'action=ship&order_id=123&fees=f1&fees=f2&label=a%20demo'

4
মঞ্জুর, আপনি প্রায় 10 বছর আগে উত্তর দিয়েছিলেন তবে এই কোডটি এখন অবচয় করা হয়েছে।
এসইওএফ

4

আপনার সাথে আজকাল তা করতে পারে FormDataএবং URLSearchParamsকিছু উপর লুপ প্রয়োজন ছাড়াই।

const formData = new FormData(form);
const searchParams = new URLSearchParams(formData);
const queryString = searchParams.toString();

যদিও পুরানো ব্রাউজারগুলির একটি পলিফিল লাগবে।


3

আমি নিজেকে পুরোপুরি নিশ্চিত নই, আমি দেখে মনে করি jQuery এটি কিছুটা হলেও করেছে, তবে এটি শ্রেণিবদ্ধ রেকর্ডগুলি মোটেও হ্যান্ডেল করে না, পিএইচপি বন্ধুত্বপূর্ণ উপায়ে ছেড়ে দেয়।

একটি জিনিস আমি নিশ্চিতভাবে জানতে পারি, এটি হল ইউআরএলগুলি তৈরি করার সময় এবং পণ্যটি ডোমের সাথে আঁকিয়ে রাখার সময়, কেবল স্ট্রিং-আঠালো এটি ব্যবহার করার জন্য ব্যবহার করবেন না, বা আপনি নিজেকে একটি সহজ পৃষ্ঠা ব্রেকারের কাছে খুলতে যাবেন।

উদাহরণস্বরূপ, কিছু নির্দিষ্ট বিজ্ঞাপন সফ্টওয়্যার আপনার ফ্ল্যাশ যা কিছু চালায় তার থেকে সংস্করণটিকে সাইন ইন করে। এটি ঠিক আছে যখন এর জেনেরিক সরল স্ট্রিংটি মানা হয়, তবে এটি খুব নিখুঁত এবং Gnash ইনস্টল করা লোকেদের জন্য বিব্রতকর গোলমেলে উড়ে যায়, কারণ gnash'es সংস্করণ স্ট্রিংয়ে সম্পূর্ণরূপে GPL কপিরাইট লাইসেন্স থাকে যা ইউআরএল সহ সম্পূর্ণ হয় happens এবং <a href> ট্যাগ। আপনার স্ট্রিং-আঠালো বিজ্ঞাপনদাতা জেনারেটরে এটি ব্যবহার করে, ফলাফলটি পৃষ্ঠাটি ফুলে ওঠে এবং ভারসাম্যহীন এইচটিএমএল ডোমটিতে পরিণত হয়।

গল্পটির সারাংশ হলো:

   var foo = document.createElement("elementnamehere"); 
   foo.attribute = allUserSpecifiedDataConsideredDangerousHere; 
   somenode.appendChild(foo); 

না:

   document.write("<elementnamehere attribute=\"" 
        + ilovebrokenwebsites 
        + "\">" 
        + stringdata 
        + "</elementnamehere>");

গুগল এই কৌশল শিখতে হবে। আমি সমস্যাটি রিপোর্ট করার চেষ্টা করেছি, তারা যত্নশীল নয় বলে মনে হচ্ছে।


ঠিক. ডকুমেন্ট.উইরাইট তাই 1995, তাই যাইহোক।

2

স্টেইন যেমন বলেছেন, আপনি http://www.prototypejs.org থেকে প্রোটোটাইপ জাভাস্ক্রিপ্ট লাইব্রেরি ব্যবহার করতে পারেন । জেএস অন্তর্ভুক্ত করুন এবং এটি তখন খুব সহজ, $('formName').serialize()আপনি যা চান ফিরে আসবে!


2

আমাদের মধ্যে যারা jQuery পছন্দ করেন তাদের জন্য আপনি ফর্ম প্লাগইনটি ব্যবহার করবেন: http://plugins.jquery.com/project/form , এতে ফর্মশিরাইজ পদ্ধতি রয়েছে।


2

কিছুটা রিডানডান্ট হতে পারে তবে সবচেয়ে পরিষ্কার উপায় আমি খুঁজে পেয়েছি যা এখানে কয়েকটি উত্তরের উপর ভিত্তি করে তৈরি হয়েছে:

const params: {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
}

const esc = encodeURIComponent;
const query = Object.keys(params)
  .map(k => esc(k) + '=' + esc(params[k]))
  .join('&');

return fetch('my-url', {
  method: 'POST',
  headers: {'Content-Type': 'application/x-www-form-urlencoded'},
  body: query,
})

উৎস


1

এই উত্তরগুলি খুব সহায়ক, তবে আমি অন্য একটি উত্তর যুক্ত করতে চাই, এটি আপনাকে সম্পূর্ণ ইউআরএল তৈরি করতে সহায়তা করতে পারে। এই বেস CONCAT আপনাকে সহায়তা করতে পারে url, path, hashএবং parameters

var url = buildUrl('http://mywebsite.com', {
        path: 'about',
        hash: 'contact',
        queryParams: {
            'var1': 'value',
            'var2': 'value2',
            'arr[]' : 'foo'
        }
    });
    console.log(url);

আপনি এনপিএম এর মাধ্যমে ডাউনলোড করতে পারেন https://www.npmjs.com/package/build-url এর

ডেমো:

;(function () {
  'use strict';

  var root = this;
  var previousBuildUrl = root.buildUrl;

  var buildUrl = function (url, options) {
    var queryString = [];
    var key;
    var builtUrl;
    var caseChange; 
    
    // 'lowerCase' parameter default = false,  
    if (options && options.lowerCase) {
        caseChange = !!options.lowerCase;
    } else {
        caseChange = false;
    }

    if (url === null) {
      builtUrl = '';
    } else if (typeof(url) === 'object') {
      builtUrl = '';
      options = url;
    } else {
      builtUrl = url;
    }

    if(builtUrl && builtUrl[builtUrl.length - 1] === '/') {
      builtUrl = builtUrl.slice(0, -1);
    } 

    if (options) {
      if (options.path) {
          var localVar = String(options.path).trim(); 
          if (caseChange) {
            localVar = localVar.toLowerCase();
          }
          if (localVar.indexOf('/') === 0) {
              builtUrl += localVar;
          } else {
            builtUrl += '/' + localVar;
          }
      }

      if (options.queryParams) {
        for (key in options.queryParams) {
          if (options.queryParams.hasOwnProperty(key) && options.queryParams[key] !== void 0) {
            var encodedParam;
            if (options.disableCSV && Array.isArray(options.queryParams[key]) && options.queryParams[key].length) {
              for(var i = 0; i < options.queryParams[key].length; i++) {
                encodedParam = encodeURIComponent(String(options.queryParams[key][i]).trim());
                queryString.push(key + '=' + encodedParam);
              }
            } else {              
              if (caseChange) {
                encodedParam = encodeURIComponent(String(options.queryParams[key]).trim().toLowerCase());
              }
              else {
                encodedParam = encodeURIComponent(String(options.queryParams[key]).trim());
              }
              queryString.push(key + '=' + encodedParam);
            }
          }
        }
        builtUrl += '?' + queryString.join('&');
      }

      if (options.hash) {
        if(caseChange)
            builtUrl += '#' + String(options.hash).trim().toLowerCase();
        else
            builtUrl += '#' + String(options.hash).trim();
      }
    } 
    return builtUrl;
  };

  buildUrl.noConflict = function () {
    root.buildUrl = previousBuildUrl;
    return buildUrl;
  };

  if (typeof(exports) !== 'undefined') {
    if (typeof(module) !== 'undefined' && module.exports) {
      exports = module.exports = buildUrl;
    }
    exports.buildUrl = buildUrl;
  } else {
    root.buildUrl = buildUrl;
  }
}).call(this);


var url = buildUrl('http://mywebsite.com', {
		path: 'about',
		hash: 'contact',
		queryParams: {
			'var1': 'value',
			'var2': 'value2',
			'arr[]' : 'foo'
		}
	});
	console.log(url);


1

আমি জানি এটি খুব দেরিতে উত্তর তবে খুব ভালভাবে কাজ করে ...

var obj = {
a:"a",
b:"b"
}

Object.entries(obj).map(([key, val])=>`${key}=${val}`).join("&");

দ্রষ্টব্য: অবজেক্ট.এন্ট্রিগুলি কী প্রদান করবে, জোড়াগুলি মান দেবে

উপরের লাইন থেকে আউটপুট হবে a = a & b = b

আশা করি এটি কাউকে সাহায্য করবে।

শুভ কোডিং ...


0

সম্ভবত আপনার প্রশ্নের উত্তর দিতে খুব দেরী হয়েছে।
আমার একই প্রশ্ন ছিল এবং আমি ইউআরএল তৈরি করতে স্ট্রিং যুক্ত করতে পছন্দ করি না। সুতরাং, আমি টেকহাউস হিসাবে ব্যাখ্যা হিসাবে para .param ব্যবহার শুরু করেছি ।
আমি একটি ইউআরআই.জেএস লাইব্রেরিও পেয়েছি যা আপনার জন্য URL গুলি সহজেই তৈরি করে। বেশ কয়েকটি উদাহরণ রয়েছে যা আপনাকে সহায়তা করবে: URI.js ডকুমেন্টেশন
তাদের মধ্যে একটি এখানে:

var uri = new URI("?hello=world");
uri.setSearch("hello", "mars"); // returns the URI instance for chaining
// uri == "?hello=mars"

uri.setSearch({ foo: "bar", goodbye : ["world", "mars"] });
// uri == "?hello=mars&foo=bar&goodbye=world&goodbye=mars"

uri.setSearch("goodbye", "sun");
// uri == "?hello=mars&foo=bar&goodbye=sun"

// CAUTION: beware of arrays, the following are not quite the same
// If you're dealing with PHP, you probably want the latter…
uri.setSearch("foo", ["bar", "baz"]);
uri.setSearch("foo[]", ["bar", "baz"]);`

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.