Построить строку запроса на javascript и объединить параметры в один параметр

#javascript #php #ecmascript-6 #javascript-objects

#javascript #php #ecmascript-6 #javascript-объекты

Вопрос:

Итак, проблема здесь в том, что я хочу иметь возможность создавать строку запроса и вставлять разные параметры в один из параметров в Javascript. Я могу сделать это в php, используя функцию http_build_query. Я пытался сделать это в javascript, но параметры разделяются с помощью amp; . Вот мой 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=10amp;name=johnamp;state=CAamp;p=1"
  

Вот мой js URL, но он разделяет параметры.

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

который возвращает:

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

Как я могу добавить все параметры к параметру url, и он должен возвращать что-то вроде этого url: "/test/app/sell.php?id=10amp;name=johnamp;state=CAamp;p=1"

Комментарии:

1. Странно, что переменная, которая явно является строкой, возвращается как объект. Вы используете какой-то пакет?

Ответ №1:

Вы можете сделать что-то вроде этого:

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

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

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

$_GET Значения в PHP будут присвоены в виде массива ['id'=>1, 'name'=>'john', ...] . Полный URL-адрес не будет установлен в вашем $_GET суперглобальном. Чтобы проверить ваш полный URL, я полагаю, что некоторая комбинация приведенного ниже кода — это то, что вы ищете:

 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']) amp;amp; $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
echo "$actual_link;
  

Надеюсь, это поможет,

Комментарии:

1. Это создает URL, но когда я использую встроенную функцию ParseQueryString для извлечения URL, я не получаю полный URL. Он по-прежнему разбивает строку запроса на разные объекты. Таким образом, все, что после amp;, является объектом diff в строке запроса, когда я использую функцию ParseQueryString.

2. Мне понадобится дополнительная информация о вашей ParseQueryString функции. Где у вас extracting URL? Пожалуйста, взгляните на обновления, которые я опубликовал

3. Я извлекаю URL-адрес в react с помощью ParseQueryString функции. Затем извлеките URL из ParseQueryString. итак, я делаю что-то подобное в react let queryString = ParseQueryString(window.location.search); затем разбираю объект url из queryString