2008-09-21 13 views
77

क्वेरी पैरामीटर बनाने के लिए कोई तरीका है जावास्क्रिप्ट में अनुरोध प्राप्त करें?जावास्क्रिप्ट में क्वेरी पैरामीटर कैसे बनाएं?

बस पाइथन में आपके पास urllib.urlencode() है, जो एक शब्दकोश (या दो tuples की सूची) में लेता है और 'var1=value1&var2=value2' जैसे स्ट्रिंग बनाता है।

उत्तर

133

ये रहा:

function encodeQueryData(data) { 
    let ret = []; 
    for (let d in data) 
    ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d])); 
    return ret.join('&'); 
} 

उपयोग:

var data = { 'first name': 'George', 'last name': 'Jetson', 'age': 110 }; 
var querystring = encodeQueryData(data); 
+8

इंटरऑपरेबिलिटी सुनिश्चित करने के लिए 'है' के साथ पुनरावृत्ति करते समय, [hasOwnProperty] का उपयोग करें (http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty)। – troelskn

+3

@troelskn, अच्छा बिंदु ... हालांकि इस मामले में, किसी को इसे तोड़ने के लिए ऑब्जेक्ट.प्रोटोटाइप को विस्तारित करना होगा, जो शुरू करने के लिए एक बहुत बुरा विचार है। – Shog9

+1

@ शोग 9 यह एक बुरा विचारधारा क्यों है? –

7

आप Prototype उपयोग कर रहे हैं वहाँ Form.serialize

आप jQuery वहाँ है Ajax/serialize

मैं यह पूरा करने के किसी भी स्वतंत्र कार्यों का पता नहीं है प्रयोग कर रहे हैं, हालांकि, लेकिन इसके लिए एक Google खोज कर दिया कुछ वादा विकल्प यदि आप वर्तमान में पुस्तकालय का उपयोग नहीं कर रहे हैं। यदि आप नहीं हैं, हालांकि, आपको वास्तव में इसलिए करना चाहिए क्योंकि वे स्वर्ग हैं।

+5

jQuery.param() वस्तु लेता है और यह बदलने क्वेरी स्ट्रिंग (इस समारोह बेहतर मैचों प्रश्न) प्राप्त करने के लिए - यह अधिक लोकप्रिय वालों में से एक है। – azurkin

-8

यह thread PHP में यूआरएल से बचने के लिए कुछ कोड को इंगित करता है। escape() और unescape() है जो अधिकांश काम करेगा, लेकिन आपको कुछ अतिरिक्त चीजों को जोड़ने की आवश्यकता है।

function urlencode(str) { 
str = escape(str); 
str = str.replace('+', '%2B'); 
str = str.replace('%20', '+'); 
str = str.replace('*', '%2A'); 
str = str.replace('/', '%2F'); 
str = str.replace('@', '%40'); 
return str; 
} 

function urldecode(str) { 
str = str.replace('+', ' '); 
str = unescape(str); 
return str; 
} 
+1

encodeURIComponent इसे संभालता है और किसी स्थान के लिए गलत तरीके से + का उपयोग नहीं करता है। – AnthonyWJones

58

कार्यात्मक

function encodeData(data) { 
    return Object.keys(data).map(function(key) { 
     return [key, data[key]].map(encodeURIComponent).join("="); 
    }).join("&"); 
} 
+1

अच्छा है! .map() को जावास्क्रिप्ट 1.6 में कार्यान्वित किया गया है, इसलिए लगभग सभी ब्राउज़रों, यहां तक ​​कि दादी भी इसका समर्थन करते हैं। लेकिन जैसा कि आप अनुमान लगा सकते हैं आईई 9 + को छोड़कर नहीं है। लेकिन चिंता मत करो, एक कामकाज है। स्रोत: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map#Browser_compatibility –

+0

'वर डेटा = {bloop1: सच है, bloop2:" कुछ "}; var url = "https://something.com/?"; var params = encodeData (डेटा); var finalUrl = url + params; // क्या यह सही उपयोग है? '' Https: //www.something.com/? Bloop1 = true और bloop2 = something' का उत्पादन करना चाहिए? –

7

हम सिर्फजारी किया है, इस परियोजना को एक बार और सभी के लिए हल करने के उद्देश्य से एक परियोजना। यह परंपरागत रूप से बहुत मुश्किल हो गया है, लेकिन अब आप कर सकते हैं:

var querystring = Arg.url({name: "Mat", state: "CO"}); 

और पढ़ने काम करता है:

var name = Arg("name"); 

या बहुत हो रही है:

var params = Arg.all(); 

और आप के बीच के अंतर के बारे में परवाह है, तो ?query=true और #hash=true तो आप Arg.query() और Arg.hash() विधियों का उपयोग कर सकते हैं।

17

Zabba ने वर्तमान में स्वीकृत उत्तर पर एक टिप्पणी में एक सुझाव दिया है कि मुझे सबसे अच्छा समाधान है: jQuery.param() का उपयोग करें।

अगर मैं मूल प्रश्न में डेटा पर jQuery.param() उपयोग करते हैं, तो कोड बस है:

var params = jQuery.param({ 
    var1: 'value', 
    var2: 'value' 
}); 

चर params हो जाएगा

"var1=value&var2=value" 

अधिक जटिल उदाहरण, इनपुट और आउटपुट के लिए, jQuery.param() दस्तावेज देखें।

2

एक छोटी सी संशोधन टाइपप्रति रहे हैं:

public encodeData(data: any): string { 
    return Object.keys(data).map((key) => { 
     return [key, data[key]].map(encodeURIComponent).join("="); 
    }).join("&"); 
    } 
2

बस इस लगभग 10 साल पुराने सवाल फिर से मिलना अच्छा लगता है। ऑफ-द-शेल्फ प्रोग्रामिंग के इस युग में, आपकी सबसे अच्छी शर्त निर्भरता प्रबंधक (npm) का उपयोग करके अपनी प्रोजेक्ट को सेट अप करना है। वहां पुस्तकालयों का एक संपूर्ण कुटीर उद्योग है जो क्वेरी स्ट्रिंग को एन्कोड करता है और सभी किनारे के मामलों का ख्याल रखता है।

https://www.npmjs.com/package/query-string

संबंधित मुद्दे