首页 > 解决方案 > 在 javascript 中构建查询字符串并将参数合并到一个参数中

问题描述

所以这里的问题是我希望能够构建一个查询字符串并将不同的参数嵌套在 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"

标签: javascriptphpecmascript-6javascript-objects

解决方案


你可以这样做:

// 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 不会在你的$_GETsuperglobal 中设置。要检查您的完整网址,我相信您正在寻找以下代码的某种组合:

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;

希望这可以帮助,


推荐阅读