2009-07-08 3 views
0

Wie kodieren Sie ein JavaScript-Objekt/Hash (Paare von Eigenschaften und Werten) in eine URL-codierte Abfragezeichenfolge mit YUI (2.7.0 oder 3.0.0 Beta)?Unterstützung für die Codierung Abfrage Zeichenfolge oder POST-Daten in YUI?

Ich möchte das Äquivalent von Object.toQueryString() von Prototype tun:

ich diese müssen mit YAHOO.util.Connect kodieren Parameter für GET und POST-Requests.

Es stellt sich heraus, YAHOO.util.Connect hat eine setForm() -Methode, um ein Formular zu serialisieren, aber das lässt mich noch kalt, um Parameter für GET-Anforderungen oder den 4. Parameter von YAHOO.util.Connect.asyncRequest() zu kodieren Post-Daten weitergeben.

Antwort

2

Ich habe diesen kleinen Helfer für mein eigenes Projekt gemacht.

var toQueryString = function(o) { 
    if(typeof o !== 'object') { 
     return false; 
    } 
    var _p, _qs = []; 
    for(_p in o) { 
     _qs.push(encodeURIComponent(_p) + '=' + encodeURIComponent(o[_p])); 
    } 
    return _qs.join('&'); 
}; 

// And to use it 
var qs = toQueryString({'foo' : 'bar'}); 
0

YUI3 hat das io-form-Modul, das Sie in Ihrem Anruf verwenden können. Es ermöglicht Ihnen, Code wie folgt zu schreiben:

YUI().use('node', 'io-form', function(Y) { 
Y.get('#formId').on('sumbit', function(e) { 
     e.preventDefault(); 
     Y.io(postURL, 
     { 
      method: "POST", 
      on: { 
       complete: on_complete_handler 
      }, 
      form: { 
       id: "formId" 
      } 
     }); 
    } 
}); 

Dieser Code wird eine POST-Anforderung an PostURL machen, mit allen Eingabewerten aus dem Formular mit der ID „formid“ vorgelegt. Dieses Modul funktioniert auch für GET-Anfragen.

+0

Meine Frage ist über die Codierung eines Javascript Hash/Objekt. Bezüglich Formular bietet YUI 2.7.0 Connection Manager eine setForm() Methode. –

0

Ich habe so etwas auf Basis von etwas Code auf Github gefunden. Die Funktion muss Entsendung Arrays Griff ..

„Y“ ist ein Verweis auf „YAHOO“

/** 
    * Turns an object into its URL-encoded query string representation. 
    * 
    * @param {Object} obj Parameters as properties and values 
    */ 
    toQueryString: function(obj, name) { 

     var i, l, s = []; 

     if (Y.lang.isNull(obj) || Y.lang.isUndefined(obj)) { 
     return name ? encodeURIComponent(name) + '=' : ''; 
     } 

     if (Y.lang.isBoolean(obj)) { 
     obj = obj ? 1 : 0; 
     } 

     if (Y.lang.isNumber(obj) || Y.lang.isString(obj)) { 
     return encodeURIComponent(name) + '=' + encodeURIComponent(obj); 
     } 

     if (Y.lang.isArray(obj)) { 
     name = name; // + '[]'; don't do this for Java (php thing) 
     for (i = 0, l = obj.length; i < l; i ++) { 
      s.push(arguments.callee(obj[i], name)); 
     } 
     return s.join('&'); 
     } 

     // now we know it's an object. 
     var begin = name ? name + '[' : '', 
      end = name ? ']' : ''; 
     for (i in obj) { 
     if (obj.hasOwnProperty(i)) { 
      s.push(arguments.callee(obj[i], begin + i + end)); 
     } 
     } 

     return s.join("&"); 
    } 
0

Ich sehe Yahoo User Interface Library Ticket 2528174 bezieht sich auf eine akzeptierte contribution auf dafür.

The Querystring Utility 
    Provides static methods to serialize objects to querystrings and deserialize objects from querystrings. 

    Three modules are available: 
     querystring   - Both parse and stringify functionality 
     querystring-parse  - Parse valid querystring into JavaScript objects 
     querystring-stringify - Serialize JavaScript objects into valid query strings