支持在YUI中编码查询字符串或POST数据?

时间:2009-07-08 07:50:44

标签: javascript ajax yui

如何使用YUI(2.7.0或3.0.0 Beta)将javascript对象/散列(属性和值对)编码为URL编码的查询字符串?

我想从Prototype中执行等效的Object.toQueryString()

我需要使用YAHOO.util.Connect为GET和POST请求编码参数。

事实证明,YAHOO.util.Connect有一个setForm()方法来序列化一个表单,但仍然让我感到寒冷,无法为GET请求编码参数,或者YAHOO.util.Connect.asyncRequest()的第四个参数传递数据。

4 个答案:

答案 0 :(得分:2)

我为自己的项目做了这个小帮手。

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'});

答案 1 :(得分:0)

YUI3有io-form模块,你可以在你的调用中实例化使用。它允许您编写如下代码:

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"
            }
        });
    }
});

此代码将对postURL发出POST请求,并提交ID为“formId”的表单中的所有输入值。该模块也适用于GET请求。

答案 2 :(得分:0)

我最终根据github上的一些代码使用了这样的东西。该函数必须处理发布数组..

“Y”是对“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("&");
    }

答案 3 :(得分:0)

我看到YUILibrary Ticket 2528174指的是已接受的contribution

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