javascript - 填充 AJAX javascript/jQuery 下拉列表(省、州、城市)有时会给出未定义的结果

标签 javascript jquery ajax cross-browser

我目前使用的是jquery-1.11.1.min.js。我有三个不同的下拉菜单:省、州、城市,并且我有以下 javascript 来处理用户选择省、州或城市时的更改。

$provinceSelector = $('.selector-province');
$stateSelector = $('.selector-state');
$citySelector = $('.selector-city');

$provinceSelector.on('change', function () {
        var provinceid = $(this).val();
        $stateSelector.html('<option value>Loading...</option>');
        $stateSelector.attr('disabled','true');
        $.ajax({
            url: '/location/states/' + provinceid,
            timeout: 20000,
            type: 'GET',
            data: [],
            success: function (response) {
                if (!response.status || response.states.length == 0)
                {
                    $provinceSelector.val('');
                    $stateSelector.html('<option value>Pilih kabupaten lokasi toko kamu</option>');
                }
                else if (response.status && response.states.length > 0 && $stateSelector)
                {
                    $stateSelector.removeAttr('disabled');
                    $stateSelector.html('<option value>Pilih kabupaten</option>');
                    for (var i = 0; i < response.states.length; i++)
                    {
                        $stateSelector.append('<option value="' + response.states[i].id + '">' + response.states[i].name + '</option>');
                    }
                }
            },
            error: function (x, t, m) {
                $provinceSelector.val('');
                $stateSelector.html('<option value>Pilih kabupaten lokasi toko kamu</option>');
            },
        });
    });

服务器返回的端点如下所示:

{"status":true,"cities":[{"id":67,"name":"Alas"},{"id":68,"name":"Alas Barat"},{"id":472,"name":"Batu Lanteh"},{"id":1233,"name":"Empang"},{"id":2276,"name":"Labangka"},{"id":2283,"name":"Labuhan Badas"},{"id":2338,"name":"Lape-Lopok"},{"id":2547,"name":"Lunyuk"},{"id":2919,"name":"Moyohilir"},{"id":2920,"name":"Moyohulu"},{"id":3605,"name":"Plampang"},{"id":3936,"name":"Ropang"},{"id":4603,"name":"Sumbawa"},{"id":4604,"name":"Sumbawa Besar"},{"id":5265,"name":"Utan-Rhee"}]}

如果发生错误,它也可以返回状态 false。现在的问题是,有几次我收到用户的报告,他们在选择省份后在该州看到未定义(换句话说,该州没有选项,只是未定义),这通常在移动设备上。我想知道这怎么可能?我想我正在处理所有可能的情况。有什么想法/提示吗?

最佳答案

如前所述 - 检查/验证未定义(if/try catch...)并在服务器上进行一些登录以查看发生了什么:)

还有另一个提示 - 移动设备可能会出现信号覆盖不良/超时等情况 - 这就是您可能设置 20 秒超时的原因。这将是我调试的下一步。

关于javascript - 填充 AJAX javascript/jQuery 下拉列表(省、州、城市)有时会给出未定义的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26652578/

相关文章:

javascript - 如何查看内存中的所有函数和变量(JavaScript)?

javascript - ngRoute 和 Underscore.js 的 RequireJS shim 配置

php - 如何在更改时更新所选选项元素的总和

javascript - 获取这些 ajax 值

javascript - 尝试处理触摸事件

javascript - 使用 javascript 刷新莫里斯图

javascript - 单击菜单时超链接问题不重定向到另一个网页

javascript - 如何动态更新字段而不刷新且不占用服务器?

javascript - jquery函数中的目标AJAX id

javascript - 在 Cache API 中,使用 caches.match(event.request) 和 caches.match(event.request.url) 有什么区别