123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import defined from "./defined.js";
- import DeveloperError from "./DeveloperError.js";
- /**
- * Converts an object representing a set of name/value pairs into a query string,
- * with names and values encoded properly for use in a URL. Values that are arrays
- * will produce multiple values with the same name.
- * @function objectToQuery
- *
- * @param {Object} obj The object containing data to encode.
- * @returns {String} An encoded query string.
- *
- *
- * @example
- * const str = Cesium.objectToQuery({
- * key1 : 'some value',
- * key2 : 'a/b',
- * key3 : ['x', 'y']
- * });
- *
- * @see queryToObject
- * // str will be:
- * // 'key1=some%20value&key2=a%2Fb&key3=x&key3=y'
- */
- function objectToQuery(obj) {
- //>>includeStart('debug', pragmas.debug);
- if (!defined(obj)) {
- throw new DeveloperError("obj is required.");
- }
- //>>includeEnd('debug');
- let result = "";
- for (const propName in obj) {
- if (obj.hasOwnProperty(propName)) {
- const value = obj[propName];
- const part = `${encodeURIComponent(propName)}=`;
- if (Array.isArray(value)) {
- for (let i = 0, len = value.length; i < len; ++i) {
- result += `${part + encodeURIComponent(value[i])}&`;
- }
- } else {
- result += `${part + encodeURIComponent(value)}&`;
- }
- }
- }
- // trim last &
- result = result.slice(0, -1);
- // This function used to replace %20 with + which is more compact and readable.
- // However, some servers didn't properly handle + as a space.
- // https://github.com/CesiumGS/cesium/issues/2192
- return result;
- }
- export default objectToQuery;
|