У меня есть форма, которая содержит 2 <select>
, первый выбор автоматически заполняется при загрузке страницы, тогда как второй выбор заполняется на основе выбора, выбранного в первом выборе.
Чтобы выполнить это, всякий раз, когда изменяется состояние выбора, выбранное значение в первом будет передано на отдельную страницу, где используется для заполнения второго <select>
проблема
Выбранное значение (Food & Beverages в этом случае), которое проходит через URL-адрес, отключается наполовину, в результате чего неполная строка должна быть отправлена на страницу обработки для второго, что не позволяет ее выполнить.
Шаги, предпринятые для определения проблемы, я повторил значения, которые передаются по URL-адресу, и получил только «Продовольствие», а остальная часть строки была отключена. Я попробовал заменить строковые значения на Food and Beverage, и все это прекрасно работает, что привело меня к выводу, что строка отключается из-за знака амперсанда (&), который заставляет компьютер обрабатывать часть строки после амперсанда в качестве другого значения, которое должно быть передано через URL. Однако, поскольку я не назначал его переменной, он не проходит.
Вопрос
Есть ли какой-либо способ передать значение без его обрезания?
Извлечение кода:
Страница обработки
<?PHP include("cxn.inc"); $query=$cxn->prepare("SELECT * FROM `BusinessSubCategory` WHERE `BusinessCategory`=:businesscategory"); $query->bindValue(":businesscategory",$_GET['category']); $query->execute(); $count=$query->rowCount(); if($count>0) { echo"<option id='subcategory' value=''>Please select a SubCategory</option>"; while($result=$query->fetch(PDO::FETCH_ASSOC)) { $subcategory=$result['BusinessSubCategory']; echo"<option id=$subcategory value=$subcategory >$subcategory</option>"; } } else { echo"<option id='subcategory' value=''>Error,fetch query not run. </option>"; } ?>
в<?PHP include("cxn.inc"); $query=$cxn->prepare("SELECT * FROM `BusinessSubCategory` WHERE `BusinessCategory`=:businesscategory"); $query->bindValue(":businesscategory",$_GET['category']); $query->execute(); $count=$query->rowCount(); if($count>0) { echo"<option id='subcategory' value=''>Please select a SubCategory</option>"; while($result=$query->fetch(PDO::FETCH_ASSOC)) { $subcategory=$result['BusinessSubCategory']; echo"<option id=$subcategory value=$subcategory >$subcategory</option>"; } } else { echo"<option id='subcategory' value=''>Error,fetch query not run. </option>"; } ?>
в<?PHP include("cxn.inc"); $query=$cxn->prepare("SELECT * FROM `BusinessSubCategory` WHERE `BusinessCategory`=:businesscategory"); $query->bindValue(":businesscategory",$_GET['category']); $query->execute(); $count=$query->rowCount(); if($count>0) { echo"<option id='subcategory' value=''>Please select a SubCategory</option>"; while($result=$query->fetch(PDO::FETCH_ASSOC)) { $subcategory=$result['BusinessSubCategory']; echo"<option id=$subcategory value=$subcategory >$subcategory</option>"; } } else { echo"<option id='subcategory' value=''>Error,fetch query not run. </option>"; } ?>
Код JQuery
$(document).ready(function(){ $('#BusinessCreateCategory').load('getbusinesscategory.php'); $('#BusinessCreateCategory').change(function(){ var category=$('#BusinessCreateCategory').val(); window.location.href='getbusinesssubcategory.php?category='+category; });
EDIT: пробовал encodeURIComponent, но данные не закодированы, так как я могу видеть по URL-адресу обработчика apge, что он отключен на амперсанде. Тем не менее, если бы я вручную вводил URL-адрес в качестве строки, а затем кодировал его, используя encodeURIComponent, он работает чудесно. Кто-то пролил некоторый свет на то, почему я не могу кодировать $ ('# BusinessCreateCategory'). val (); ? Благодаря!
E.gThis работает
var category="Food & Beverages"; var encoded =encodeURIComponent(category); window.location.href='getbusinesssubcategory.php?category='+encoded;
Например, это не
var category=$('#BusinessCreateCategory').val(); var encoded= encodeURIComponent(category); window.location.href='getbusinesssubcategory.php?category='+encoded;
Если это помогает, данные, которые я пытаюсь передать через URL, берутся из моей базы данных.
Прежде чем использовать его в URL-адресе, необходимо encodeURIComponent
значение для категории.
$('#BusinessCreateCategory').change(function(){ var category=$('#BusinessCreateCategory').val(); var encoded = encodeURIComponent(category); window.location.href='getbusinesssubcategory.php?category='+encoded; });
Амперсанд – это особый символ, который искажает URL-адрес, который вы пытаетесь передать. Кодирование значения должно позволить вам рассматривать его как одно значение.
Ограничение браузера ограничено количеством символов. У вас есть пример полной строки, которую вы пытаетесь передать? Вначале я подозревал, что это может быть проблема с кодировкой.
encodeURIComponent для кодирования передаваемой строки.
Значение должно быть закодировано, но когда вы запрашиваете свой db, он может искать точное совпадение, если вы не видите какой-либо вывод через кодированную строку, используйте decodeURIComponent для декодирования строки перед передачей ее в db. Проверьте вывод на phymyadmin перед тем, как вы официально разместите код.