我有一个php脚本,从国家SELECT表单返回时区,并填充时区SELECT。
'US'生产…
PHPTimezones Array
(
[0] => America/Adak
[1] => America/Anchorage
[2] => America/Boise
[3] => America/Chicago
...etc...
[28] => Pacific/Honolulu
)
echo json_encode($timezones_array_above);
但是我不知道如何在javascript/jquery中处理键/值数据,所以我不得不在php脚本中创建另一个循环来命名这对,以使用下面的javascript。
PHP// I WANT TO GET RID OF THIS EXTRA LOOP AND MOVE IT TO JAVASCRIPT PART BELOW!
foreach ($timezones as $key => $value) {
$json[] = array(
'id' => $value,
'name' => $value
);
}
echo json_encode($json);
HTML/JQUERY
$('#country').on('change', function (){
$.post('{$constant->get('AJAXPAGE')}/timezonesbycountry.php', {country: $(this).val()}, function(data){
/*
// I WANT TO HANDLE THE RAW TIMEZONE ARRAY HERE!
// AND REPLACE THIS WITH KEY & VALUE VARS...
var options = '';
for (var x = 0; x < data.length; x++) {
options += '<option value="' + data[x]['id'] + '">' + data[x]['name'] + '</option>';
}
*/
$('#timezone').html(options);
}, 'json');
});
我如何在javascript中做到这一点?
这是我想到的替代,它工作,但这是正确的吗?
$('#country').on('change', function (){
$.post( "{$constant->get('AJAXPAGE')}/timezonesbycountry.php", {country: $(this).val()})
.done(function( data ) {
var result = JSON.parse(data);
var options = '';
$.each(result, function(k, v) {
options += '<option value="' + v + '">' + v + '</option>';
});
$('#timezone').html(options);
});
});
javascript对象data
中的元素是对象而不是数组。您可以通过调用console.log(data);
在控制台中检查它。
请换
options += '<option value="' + data[x]['id'] + '">' + data[x]['name'] + '</option>';
options += '<option value="' + data[x].id + '">' + data[x].name + '</option>';
这是我想到的,剥离,留下基本的…
PHP (timezonesbycountry.php)if (empty($_POST['country'])) {
$timezones = DateTimeZone::listIdentifiers(DateTimeZone::ALL);
}else{
$timezones = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $_POST['country']);
}
header('Content-Type: application/json');
echo json_encode($timezones);
JQUERY $('#country').on('change', function (){
$.post( 'timezonesbycountry.php', {country: $(this).val()})
.done(function( data ) {
var options = '';
$.each(data, function(k, v) {
options += '<option value="' + v + '">' + v + '</option>';
});
$('#timezone').html(options);
});
});
HTML <select class="form-control" id="country" name="country" required>
<option value="">Select One</option>
<option value="AF">Afghanistan</option>
<option value="US">United States</option>
...etc...
</select>
<select class="form-control" id="timezone" name="timezone" required>
<option value="">Select One</option>
...etc...
</select>
我对所有ajax请求使用临时键,并对php中的数据进行消毒…
$.post( '{$constant->get('AJAXPAGE')}/timezonesbycountry.php', {act: 'SOMETHING', ajaxkey: 'KEYHERE', country: $(this).val()})
我还预先填充国家/时区选择php数组的;如果您的国家选择是静态的,则可以使用ajax预先填充时区。
谢谢你的帮助,希望这对其他人有帮助。