Witam serdecznie, mam taki problem jak w tytule, nie wiem gdzie leży błąd, ogólne założenie na razie takie:
robie php, jsonem wracają dane, jeśli są pełne to włączam pole... ale wywala blad po dluzszym mieleniu:
skrypt:
function getValue(id) { $.ajax({ type: 'GET', url: './php/changeCountry.php', dataType: 'json', data: {'action': 'changeCountry', 'country': id} }).done(function(json) { var found = json.found; var provinces = json.provinces; if (found == 0) {$('#provincesRow').css('display', 'none');} else { $('#provincesRow').css('display', 'flex'); } console.log(found); }); }
http://www.php.net/error_reporting(E_ALL); http://www.php.net/ini_set('display_errors', 1); // Funkcja konwertująca plik xml do tablicy (co ważne, z atrybutami) function xmlToArray(SimpleXMLElement $xml) { $parser = function (SimpleXMLElement $xml, http://www.php.net/array $collection = []) use (&$parser) { $nodes = $xml -> children(); $attributes = $xml -> attributes(); if (0 !== http://www.php.net/count($attributes)) { foreach ($attributes as $attrName => $attrValue) { $collection['@attributes'][$attrName] = http://www.php.net/strval($attrValue); } } if (0 === $nodes -> http://www.php.net/count()) { if ($xml -> attributes()) {$collection['value'] = http://www.php.net/strval($xml);} else {$collection = http://www.php.net/strval($xml);} return $collection; } foreach ($nodes as $nodeName => $nodeValue) { if (http://www.php.net/count($nodeValue -> xpath('../' . $nodeName)) < 2) { $collection[$nodeName] = $parser($nodeValue); continue; } $collection[$nodeName][] = $parser($nodeValue); } return $collection; }; return [$xml -> getName() => $parser($xml)]; } http://www.php.net/header("Content-Type: application/json;charset=utf-8"); $countryId = http://www.php.net/isset($_GET['country']) ? $_GET['country'] : ''; $pathToProvincesDataBase = './../db/provinces.xml'; $loadProvincesDataBase = simplexml_load_file($pathToProvincesDataBase); $provinces = xmlToArray($loadProvincesDataBase); $provinces = $provinces['provinces']; $fId = $fName = ''; $fProvinces = http://www.php.net/array(); $found = 0; if ($_GET['action'] === 'changeCountry' && $countryId !== '') { foreach ($provinces['country'] as $p) { if ($p['@attributes']['id'] === $countryId) { $found = 1; $fId = $p['@attributes']['id']; $fName = $p['@attributes']['name']; foreach ($p['province'] as $attr) { $fProvinces[] = ['id' => $attr['@attributes']['id'], 'name' => $attr['@attributes']['name']]; } break; } } $done = ['found' => $found, 'id' => $fId, 'name' => $fName, 'provinces' => $fProvinces]; http://www.php.net/echo json_encode($done); }
<http://december.com/html/4/element/div.html class="row" id="provincesRow" style="display: <?php echo $displayProvincesRow; ?>;"> <http://december.com/html/4/element/div.html class="col"> <http://december.com/html/4/element/div.html class="form-group"> <http://december.com/html/4/element/label.html class="label-form">Województwo</http://december.com/html/4/element/label.html> <?php $foundCountry = 0; ?> <?php foreach ($provinces['country'] as $c): ?> <?php if ($config['main']['owner']['country']['value'] === $c['@attributes']['id'] || strtoupper(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)) === $c['@attributes']['id']): ?> <?php $foundCountry = 1; ?> <http://december.com/html/4/element/select.html class="form-control text-center" name="config[main][owner][province]" id="config[main][owner][province]"> <?php if (!empty($config['main']['owner']['province']['value'])) {$selected = 'selected';} else {$selected = '';} ?> <http://december.com/html/4/element/option.html class="form-control" hidden <?php echo $selected; ?>>Wybierz...</http://december.com/html/4/element/option.html> <?php foreach ($c['province'] as $p): ?> <?php if ($config['main']['owner']['province']['value'] === $p['@attributes']['id']) {$thisSelected = 'selected';} else {$thisSelected = '';} ?> <http://december.com/html/4/element/option.html class="form-control" value="<?php echo $p['@attributes']['id']; ?>" <?php echo $thisSelected; ?>><?php echo $p['@attributes']['name']; ?></http://december.com/html/4/element/option.html> <?php endforeach ?> </http://december.com/html/4/element/select.html> <?php endif ?> <?php if ($foundCountry == 1) {break;} ?> <?php endforeach ?> <?php if ($foundCountry == 0): ?> <http://december.com/html/4/element/input.html class="form-control text-center" type="text" id="config[main][owner][province]" name="config[main][owner][province]" value="<?php echo $config['main']['owner']['province']['value']; ?>"/> <?php endif ?> </http://december.com/html/4/element/div.html> </http://december.com/html/4/element/div.html>
<http://december.com/html/4/element/script.html> function getValue(countryCode) { var provinces = [<?php json_encode($provinces['country']); ?>]; var getCountry = countryCode; var found = 0; teraz trzeba zrobic petle i zobaczyc czy znajdzie id = getCountry - wtedy found = 1 i robimy tablice jsona tylko z wybranym id if (found == 0) {$('#provincesRow').css('display', 'none');} else { $('#provincesRow').css('display', 'flex'); $('#config[main][owner][province] option').each(function() { $(this).addClass('form-control').val(provinces['id']); }); } console.log(found); }); } </http://december.com/html/4/element/script.html>
http://www.php.net/array ( [0] => http://www.php.net/array ( [@attributes] => http://www.php.net/array ( [id] => DE [name] => Deutschland ) [province] => http://www.php.net/array ( [0] => http://www.php.net/array ( [@attributes] => http://www.php.net/array ( [id] => BW [name] => Baden-Württemberg ) [value] => ) [1] => http://www.php.net/array ( [@attributes] => http://www.php.net/array ( [id] => BY [name] => Bayern ) [value] => ) ... [15] => http://www.php.net/array ( [@attributes] => http://www.php.net/array ( [id] => TH [name] => Thüringen ) [value] => ) ) ) [1] => http://www.php.net/array ( [@attributes] => http://www.php.net/array ( [id] => PL [name] => Polska ) [province] => http://www.php.net/array ( [0] => http://www.php.net/array ( [@attributes] => http://www.php.net/array ( [id] => D [name] => dolnośląskie ) [value] => ) ... [15] => http://www.php.net/array ( [@attributes] => http://www.php.net/array ( [id] => Z [name] => zachodniopomorskie ) [value] => ) ) ) )
A po co to w ogóle przerabiasz na json skoro w ajax możesz też xmla zwracać do którego potem dobierać się w jquery jak do wszystkich elementów dom.
przyblizysz mi to jakos? nawet nei wiedzialem szczerze mowiac, to dlatego ze w js najmniej sie bawie, stad takie problemy
generalnie chce zrobic tak, zeby sprawdzic czy wybrany select(id kraju) istnieje w pliku xml z wojewodztwami i pokazal je jesli tak, a jesli nie - wygasil w ogole rowa z tym polem...
https://api.jquery.com/jquery.ajax/
dataType: 'xml'
duzo mi to nei mowi
A z google umiesz korzystać?
https://medium.com/dailyjs/how-to-read-xml-in-javascript-using-jquery-ajax-ecb54ffbd5bb
ok dzieki, tylko wlasciwie skoro mam i tak wszystkie dane w tablicy php to po co jeszcze raz parsowac xmla w js zamiasr skorzystac z istniejacej tablicy? podejrzewam, żeby to zadzialalo prz yzmianie - trzeba parsowac od nowa xml'a przy kazdej zmianie i sprawdzac warunki, miast zrobic to na gotowej tablicy..? cyz sie myle?
Ale po co w ogóle parsować w php. Zwróć ten xml tajemniczy bezpośrednio, jego obrób w przeglądarce. A do walidacji ewentualnej zrób cache.
i dziękuję i tylko o to mi chodzilo co ponizej:
<http://december.com/html/4/element/script.html> $('#postCountry').change(function() { var provinces = <?php echo json_encode($provinces); ?>; var countries = provinces.country; var found = 0; for (var c in countries) { var countryId = countries[c]['@attributes']['id']; if ($(this).val() === countryId) { found = 1; var foundCountry = countries[c]['province']; } } $('#postProvince').attr('value', '').empty(); if (found == 0) {$('#provincesRow').hide();} else { $('#provincesRow').show(); $('#postProvince').append('<http://december.com/html/4/element/option.html class="form-control" hidden selected>Wybierz...</http://december.com/html/4/element/option.html>'); for (var p in foundCountry) { $('#postProvince').append('<http://december.com/html/4/element/option.html class="form-control" value="' + foundCountry[p]['@attributes']['id'] + '">' + foundCountry[p]['@attributes']['name'] + '</http://december.com/html/4/element/option.html>'); } } }); </http://december.com/html/4/element/script.html>
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)