#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. итак, я делаю что-то подобное в reactlet queryString = ParseQueryString(window.location.search);
затем разбираю объект url из queryString