У меня есть массив в JS, и я пытаюсь передать его как параметр URL-адресу и поймать его в PHP, но я не могу понять, как это сделать:
var trafficFilterHolder = ["roadworks","snow","blocking"];
var filters = encodeURI(JSON.stringify(trafficFilterHolder));
К вашему сведению: я использую windows.fetch для публикации.
в PHP:
$trafficFilters = $_GET["trafficFilters"];
$obj = json_decode($trafficFilters);
var_dump($obj);
@CBroe правда, спасибо!
Отвечает ли это на ваш вопрос? кодировка URL-адреса php javascript



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте использовать ajax и передать этот массив и получить значения в конце PHP.
var filter = encodeURI(JSON.stringify(trafficFilterHolder));
$.ajax({ тип: "ПОСТ", URL-адрес: "test.php", данные: {данные: фильтры}, кеш: ложь,
success: function(){
alert("OK");
}
});
как насчет window.fetch()? не должно быть так же? Он не работает с выборкой, так зачем ему работать с ajax?
Это довольно просто, вы передаете эти данные в php с помощью ajax, верно?
Прежде всего, вы неправильно создаете массив javascript:
var trafficFilterHolder = [0: "roadworks", 1: "snow", 2: "blocking"];
Не используйте скобки для создания массивов с ключами, вместо этого используйте этот формат:
var trafficFilterHolder = {0: "roadworks", 1: "snow", 2: "blocking"};
Теперь в ajax просто добавьте массив в data:
$.ajax({
data: { trafficFilters: trafficFilterHolder }
});
Я использую Fetch, а не Ajax.
и у меня есть массив, а не объект
В своем фрагменте кода вы фактически создали массив объектов, потому что вы объявили ключи значений, поэтому я попытался помочь вам таким же образом. Но даже если у вас есть общий массив javascript, мой ответ все равно работает. Кроме того, вы не указали метод, которым вы передаете данные в php в своем вопросе, поэтому я привел пример Ajax. В следующий раз постарайтесь быть более конкретными в своих вопросах.
спасибо, я только что отредактировал свой вопрос. Я также изменил формат массива. Взгляни, пожалуйста
Все запросы к серверу выполняются в виде http-запросов. Существует два типа HTTP-запросов — GET и POST.
https://www.w3schools.com/tags/ref_httpmethods.asp
То, что вы описываете, называется запросом GET. При GET-запросе параметры передаются через адресную строку. Для создания http-запроса у вас есть два варианта.
Прямой запрос HTTP GET. Для этого вам нужно просто открыть новую страницу с
window.location.href = 'http://your_site.com/file.php?name1=value1&name2=value2'
Это откроет новую страницу в вашем браузере и передаст запрос с вашими параметрами.
Запрос AJAX может отправлять и получать информацию с сервера (либо в запросе GET, либо в POST) без обновления страницы. После этого полученным результатом можно управлять с помощью вашего javascript-приложения, как вы хотите.
Надеюсь, это проясняет для вас. Вы можете поискать обо всех этих технологиях в Google. Это способ обмена данными от внешнего интерфейса к внутреннему.
Я использую Fetch, а не Ajax, и мне нужно передать его как параметр ?trafficFilters=
Вы передаете данные в php с помощью fetch() вместо ajax, поэтому альтернатива моего первого ответа сделать то же самое с fetch():
var trafficFilterHolder = ["roadworks","snow","blocking"];
var trafficFilterHolderJoin = trafficFilterHolder.join(); // comma-separeted format => "roadworks,snow,blocking"
Теперь добавьте переменную trafficFilterHolderJoin в запрос traffic URL вашего fetch(), например:
fetch('script.php?traffic=' + trafficFilterHolderJoin)
Затем в файле сценария php вы преобразуете формат с разделителями-запятыми в формат массива php с помощью функции explode:
$traffic = explode(",", $_GET['traffic']);
почти готово, но это дает мне этот странный массив, когда я печатаю его в php: array(3) { [0]=> string(10) ""roadworks" [1]=> string(4) "snow" [2]=> string(9) "blocking"" }
Что странно? Я вижу, что дорожные работы и блокировка имеют цитату внутри, так? Если вы не знакомы с var_dump(), попробуйте использовать var_export() или print_r() для просмотра массива.
Попытка вывести любой сложный объект или массив с помощью
echoне имеет особого смысла. Используйтеvar_dumpдля правильного вывода отладки.