如何处理PHP键值对ajax json


how to handle php key value pair with ajax json

我有一个php脚本,从国家SELECT表单返回时区,并填充时区SELECT。

'US'生产…

PHP

Timezones 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预先填充时区。

谢谢你的帮助,希望这对其他人有帮助。