如何实现PHP';s http_build_查询和javascript中的反向查询?

如何实现PHP';s http_build_查询和javascript中的反向查询?,javascript,Javascript,它输出?cow=milk,而我希望它是?cow=milk&first=value试试jQuery。这很直观。您可以使用get和set访问器读取和修改查询字符串: var fromVar = $.query.load('?cow=milk') fromVar.set('first', 'value'); fromVar.toString() 可以从现有字符串创建新的查询对象: var cow = $.query.get('cow'); $.query.set('cow', 'goat');

它输出
?cow=milk
,而我希望它是
?cow=milk&first=value

试试jQuery。这很直观。您可以使用get和set访问器读取和修改查询字符串:

var fromVar = $.query.load('?cow=milk')
fromVar.set('first', 'value'); 
fromVar.toString()
可以从现有字符串创建新的查询对象:

var cow = $.query.get('cow');
$.query.set('cow', 'goat');
也可以创建空对象:

var fromVar = $.query.load('?cow=milk')
var cow = fromVar.get('cow'); // milk

如果您使用的是jQuery,则可以使用以下函数:

var newQ = $.query.empty();
newQ = newQ.set('first', 'value'); // "?first=value"

它还可以序列化一些复杂的数组。

您可以使用
URLSearchParams
类:

var obj = { "foo":"bar", "baz":"boom", "php":"hypertext processor" };
var str = jQuery.param(obj);
alert(str); // should be "foo=bar&baz=boom&php=hypertext+processor"
要从搜索参数字符串中获取参数对象,请使用以下命令:

var searchParametersData = {
  "foo": "baz",
  "bar": "foo"
};

var searchParameters = new URLSearchParams();

Object.keys(searchParametersData).forEach(function(parameterName) {
  searchParameters.append(parameterName, searchParametersData[parameterName]);
});

console.log(searchParameters.toString()); // foo=baz&bar=foo

我使用以下与PHP的http_build_查询相对应的javascript:

函数定义

var searchParametersString = "foo=baz&bar=foo";

var searchParameters = new URLSearchParams(searchParametersString);

var searchParametersData = {};

for (var searchParameter of searchParameters) {
  searchParametersData[searchParameter[0]] = searchParameter[1];
}

console.log(searchParametersData); // {foo: "baz", bar: "foo"}
const http_build_query = (dataToSend) => {
    let formBody = []
    for (let key in dataToSend) {
      let encodedKey = encodeURIComponent(key)
      let encodedValue = encodeURIComponent(dataToSend[key])
      formBody.push(encodedKey + '=' + encodedValue)
    }
    return formBody.join('&')
}
用法

var searchParametersString = "foo=baz&bar=foo";

var searchParameters = new URLSearchParams(searchParametersString);

var searchParametersData = {};

for (var searchParameter of searchParameters) {
  searchParametersData[searchParameter[0]] = searchParameter[1];
}

console.log(searchParametersData); // {foo: "baz", bar: "foo"}
const http_build_query = (dataToSend) => {
    let formBody = []
    for (let key in dataToSend) {
      let encodedKey = encodeURIComponent(key)
      let encodedValue = encodeURIComponent(dataToSend[key])
      formBody.push(encodedKey + '=' + encodedValue)
    }
    return formBody.join('&')
}

这有帮助吗?不,我不能为这个功能导入一个全新的巨人!该函数没有任何依赖项,因此您可以复制并粘贴它(遵循许可证)。这样就很好了!但是如何将查询字符串转换回数组/对象呢?在http\u build\u查询的PHP文档的相关函数列表中,您可以找到parse\u str,它可以满足您的需要。谷歌是你的朋友(再次…):不,我不希望它从location.href获取查询字符串,而是从特定的javascript变量获取。你可以从现有字符串创建它。上面有一个bug,我已修复。我在@Shea做了一个演示,如果答案不能解决您的问题,请投票否决。您将它命名为
var array
,它应该是
var obj
,很好地发现了-某人只花了7年时间:)嗨,如果返回一种类型的对象?什么是最佳实践?例如:Object.keys(searchParametersData).forEach(function(parameterName){if(searchParametersData[parameterName]!='Object'){searchParameters.append(parameterName,searchParametersData[parameterName])else{let objeto=searchParametersData[parameterName]Object.keys(objeto).forEach(函数(parameterName){searchParameters.append(parameterName,objeto[parameterName])})