【问题标题】:Build query string in javascript and merge params in one param在 javascript 中构建查询字符串并将参数合并到一个参数中
【发布时间】:2019-03-12 00:48:02
【问题描述】:

所以这里的问题是我希望能够构建一个查询字符串并将不同的参数嵌套在 Javascript 中的一个参数中。我可以使用 http_build_query 函数在 php 中执行此操作。我尝试在 javascript 中执行此操作,但参数被 & 分割。 这是我的php代码

$query string = [
            'action'      => 'index',
            'url'         => '/test/app/sell.php?'. http_build_query([
                'id'      => $id,
                'name'    => $name,
                'state'   => $currentState,
                'p'   => 1,
            ])
        ));

返回

url: "/test/app/sell.php?id=10&name=john&state=CA&p=1"

这是我的 js 网址,但它分隔了参数。

url = "url=/test/app/sell.php?"&id=" + id + "&name=" + name + "&state=" + form_name + "&p=" + 1"

返回:

id: 2,
name: "john",
state: "CA",
p: 1,
url: "/test/app/sell.php?"

如何将所有参数添加到 url 参数,它应该返回类似 url: "/test/app/sell.php?id=10&name=john&state=CA&p=1"

【问题讨论】:

  • 奇怪的是,一个明显是字符串的变量被作为对象返回。你在使用某种包吗?

标签: javascript php ecmascript-6 javascript-objects


【解决方案1】:

你可以这样做:

// Version 1 - preferable IMO 
buildQuery = ({action, url}) => `${action}?${Object.entries(url)
  .map(pair => pair.map(encodeURIComponent).join('='))
  .join('&')}`;

let query = buildQuery({
  action: "/test/app/sell.php",
  url: {
    id: 2,
    name: "john",
    state: "CA",
    p: 1
  }
});

console.log(`URL: ${query}`);

PHP 中的$_GET 值将分配为数组['id'=>1, 'name'=>'john', ...]。完整的 URL 不会在您的 $_GET 超级全局中设置。要检查您的完整网址,我相信您正在寻找以下代码的某种组合:

echo $_SERVER['REQUEST_URI']; 
$actual_link = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
echo "$actual_link;
// Support for HTTP and HTTPS
$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
echo "$actual_link;

希望对你有帮助,

【讨论】:

  • 构建了 url,但是当我使用 ParseQueryString 内置函数来提取 url 时,我没有得到完整的 url。它仍然将查询字符串拆分为不同的对象。因此,当我使用 ParseQueryString 函数时,& 之后的任何内容都是查询字符串中的差异对象。
  • 我需要更多关于您的ParseQueryString 函数的信息。你在哪里extracting 网址?请查看我发布的更新
  • 我正在使用 ParseQueryString 函数提取反应中的 url。然后从 ParseQueryString 中提取 url。所以我在 react let queryString = ParseQueryString(window.location.search); 中做这样的事情,然后从 queryString 中解析出 url 对象
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 2014-10-09
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
相关资源
最近更新 更多