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);
});
}
plik php
// Funkcja konwertująca plik xml do tablicy (co ważne, z atrybutami)
function xmlToArray(SimpleXMLElement $xml) {
$parser = function (SimpleXMLElement
$xml, array $collection = []) use
(&$parser) { $nodes = $xml -> children();
$attributes = $xml -> attributes();
if (0
!== count($attributes)) { foreach ($attributes as $attrName => $attrValue) {
$collection['@attributes'][$attrName] = strval($attrValue); }
}
if (0
=== $nodes -> count()) { if ($xml -> attributes()) {$collection['value'] = strval($xml);} else {$collection = strval($xml);} return $collection;
}
foreach ($nodes as $nodeName => $nodeValue) {
if (count($nodeValue -> xpath('../' . $nodeName)) < 2
) { $collection[$nodeName] = $parser($nodeValue);
continue;
}
$collection[$nodeName][] = $parser($nodeValue);
}
return $collection;
};
return [$xml -> getName() => $parser($xml)];
}
header("Content-Type: application/json;charset=utf-8");
$countryId = isset($_GET['country']) ?
$_GET['country'] : ''; $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; ?>;">
<?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 = '';} ?>
<option class="form-control" hidden <?php echo $selected; ?>>Wybierz...
</option> <?php foreach ($c['province'] as $p): ?>
<?php if ($config['main']['owner']['province']['value'] === $p['@attributes']['id']) {$thisSelected = 'selected';} else {$thisSelected = '';} ?>
<option class="form-control" value="<?php echo $p['@attributes']['id']; ?>"
<?php echo $thisSelected; ?>>
<?php echo $p['@attributes']['name']; ?></option> <?php endforeach ?>
<?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 ?>
@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:
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);
});
}
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] =>
)
)
)
)