2015-02-20 6 views
10

यूआरएल के लिए मैं जिस तरह से jQuery के $ .ajax() विधि अनुरोध यूआरएल निर्दिष्ट कर सकते हैं की तरह है:jQuery पैरामीटर संलग्न

{ 
    url: 'http://domain.com/?param=1', 
    data{ 
    param2: '2' 
    } 
} 

$ .ajax() विधि होगा (शायद) कॉल $ परम() प्रदान की पर डेटा और वैकल्पिक रूप से प्रदान किए गए यूआरएल में इसे संलग्न करें।

मेरा प्रश्न है: क्या इस प्रकार का यूआरएल हेरफेर $ .ajax() कॉल के बाहर उपलब्ध है?

उदाहरण के लिए, मैं एक पॉपअप विंडो खोलना चाहता हूं, और मैं उसी तरह यूआरएल बनाना चाहता हूं जो मैं $ .ajax() के साथ करता हूं।

मैं एक समारोह जो ऐसा करता है लिखा है, लेकिन मुझे लगता है मैं पहिया और jQuery की नकल पहले से ही विद्यमान समारोह पुनर्रचना रहा है:

var prepareUrl = function(url, data) 
{ 
    var params = $.param(data); 

    if (params.length > 0) 
    { 
    // url contains a query string 
    if (url.indexOf('?') > -1) 
    { 
     // get last char of url 
     var lastChar = url.substr(url.length - 1); 

     // Append & to the end of url if required 
     if (lastChar != '&' && lastChar != '?') 
     { 
     url += '&'; 
     } 
    } 

    else // url doesn't contain a query string 
    { 
     url += '?'; 
    } 

    url += params; 
    } 

    return url; 
} 

धन्यवाद!

उत्तर

5

के बाद से अन्य उत्तर मेरे सवाल का जवाब नहीं था, मैं कैसे यह परम डेटा के साथ यूआरएल विलीन हो जाती है को देखने के लिए $.ajax() कॉल के साथ कुछ परीक्षण किए हैं।

मेरे निष्कर्ष अब तक:

  • यदि यूआरएल एक ? होता है, तो $.ajax() जोड़ देंगे, '&' + $.param(data)
  • यदि नहीं, तो $.ajax()'?' + $.param(data)

तो अगर जोड़ देंगे, मैं $.ajax() के साथ मेरे यूआरएल प्रोसेसिंग फ़ंक्शन को संगत रखना चाहते हैं, तो यह कुछ पसंद होना चाहिए ई निम्नलिखित:

var addParams = function(url, data) 
    { 
    if (! $.isEmptyObject(data)) 
    { 
     url += (url.indexOf('?') >= 0 ? '&' : '?') + $.param(data); 
    } 

    return url; 
    } 

मैं अभी भी सोच रहा हूं कि ऐसा करने के लिए एक अंतर्निहित jQuery विधि है या नहीं।

1

param विधि आपके लिए एक क्वेरी स्ट्रिंग उत्पन्न करेगी, लेकिन आपको मौजूदा क्वेरी स्ट्रिंग को हटाने की आवश्यकता होगी।

var base = "http://example.com/foo/?example=old"; 
 
var data = { 
 
    foo: "hello", 
 
    bar: "world?" 
 
}; 
 
var url = base.replace(/\?.*$/, "") + "?" + jQuery.param(data); 
 
alert(url);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

2

You can build query string like this:

getQueryStr = function(obj) { 
    var str = []; 
    for (var p in obj) 
     if (obj.hasOwnProperty(p)) { 
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
     } 
    return str.join("&"); 
} 

console.log(serialize({ 
    param1: "val1", 
    param2: "val2" 
})); 

For recursive :

getQueryStr = function(obj, prefix) { 
    var str = []; 
    for (var p in obj) { 
     if (obj.hasOwnProperty(p)) { 
      var k = prefix ? prefix + "[" + p + "]" : p, 
       v = obj[p]; 
      str.push(typeof v == "object" ? 
       getQueryStr(v, k) : 
       encodeURIComponent(k) + "=" + encodeURIComponent(v)); 
     } 
    } 
    return str.join("&"); 
} 

console.log(serialize({ 
    favfruit: "apple", 
    data: { 
     name: 'js', 
     points: [1, 2, 3] 
    } 
})); 
+1

'असीमित संदर्भ त्रुटि: धारावाहिक परिभाषित नहीं किया गया है' - और ऐसा लगता है कि आप अभी भी पहिया को फिर से बदल रहे हैं, बस अलग-अलग। – Quentin

+1

आपकी 'getQueryStr' विधि jQuery से '$ .param()' से अलग कैसे है? मेरा प्रश्न मौजूदा यूआरएल में तर्क जोड़ने के बारे में था जिसमें पहले से ही एक क्वेरी स्ट्रिंग है। '$ .ajax()' विधि बहुत अच्छी तरह से संभालती है। – Karolis

2

हाँ आप jqueries उपयोग कर सकते हैं .param() समारोह यह करने के लिए।

jsfiddle demo

var params = { param1:"foo", param2:"bar"}; 
var str = jQuery.param(params); 
alert(str); 
संबंधित मुद्दे