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); }); }
plik php
// Funkcja konwertująca plik xml do tablicy (co ważne, z atrybutami) function xmlToArray(SimpleXMLElement $xml) { $nodes = $xml -> children(); $attributes = $xml -> attributes(); foreach ($attributes as $attrName => $attrValue) { } } return $collection; } foreach ($nodes as $nodeName => $nodeValue) { $collection[$nodeName] = $parser($nodeValue); continue; } $collection[$nodeName][] = $parser($nodeValue); } return $collection; }; return [$xml -> getName() => $parser($xml)]; } $pathToProvincesDataBase = './../db/provinces.xml'; $loadProvincesDataBase = simplexml_load_file($pathToProvincesDataBase); $provinces = xmlToArray($loadProvincesDataBase); $provinces = $provinces['provinces']; $fId = $fName = ''; $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]; }
no i html
<div class="row" id="provincesRow" style="display: <?php echo $displayProvincesRow; ?>;"> <div class="col"> <div class="form-group"> <?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; ?> <select 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 = '';} ?> <?php foreach ($c['province'] as $p): ?> <?php if ($config['main']['owner']['province']['value'] === $p['@attributes']['id']) {$thisSelected = 'selected';} else {$thisSelected = '';} ?> <?php endforeach ?> </select> <?php endif ?> <?php if ($foundCountry == 1) {break;} ?> <?php endforeach ?> <?php if ($foundCountry == 0): ?> <input 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 ?> </div> </div>
@EDIT
Właściwie niepotrzebnie zafiksowałem się na php i json skoro wszystko można zapiąc w jednym skrypcie bo przecież wystarczy tablicę przerobić na json i w skrypcie walidować... Tylko czy mi ktoś może pomóc w tym, wtedy chodziłoby o coś takiego:
<script> 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); }); } </script>
tablica wyglada tak:
( ( ( [id] => DE [name] => Deutschland ) ( ( ( [id] => BW [name] => Baden-Württemberg ) [value] => ) ( ( [id] => BY [name] => Bayern ) [value] => ) ... ( ( [id] => TH [name] => Thüringen ) [value] => ) ) ) ( ( [id] => PL [name] => Polska ) ( ( ( [id] => D [name] => dolnośląskie ) [value] => ) ... ( ( [id] => Z [name] => zachodniopomorskie ) [value] => ) ) ) )