填充AJAX javascript/jQuery下拉列表(省、州、市)会给出未定义的位置

填充AJAX javascript/jQuery下拉列表(省、州、市)会给出未定义的位置,javascript,jquery,ajax,cross-browser,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 () {

我目前正在使用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 false。现在的问题是,在一些情况下,我从用户那里收到报告,他们在选择一个省后发现该州没有定义,换句话说,该州没有选项,只是没有定义,这通常是在移动设备上。我想知道这怎么可能?我想我正在处理每一个可能的案件。有什么想法/提示吗?

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


还有一个提示-手机可能覆盖范围/超时时间不好等-这就是您可能设置20秒超时的原因。这将是我调试的下一步。

在您的情况下,这可能是因为任何问题:

来自服务器的长ping。那你为什么要用20秒超时呢。 移动设备上js库中的问题。 解决此问题的方法类似于设置验证,如果响应。状态为[i]!=未定义或使用try-catch构造。下面我提供了一些代码,这些代码将在没有未定义错误的情况下执行


如果省未定义,则无法显示它。但可能我没有理解你的问题我在代码中没有看到任何可能导致这种情况的东西。它在响应中必须是未定义的。@AlexFilatov它只是偶尔发生,而不是一直发生,而且它也适用于某些设备。您应该在“未定义”上添加验证,以验证您期望响应中的变量是否相等undefined@AlexFilatov我该怎么做?你是说用javascript试试catch?您能展示一些代码吗?好的,如果在这样的上下文中未定义,那么下面的Alex es示例就可以了。仍然-在这种情况下,一些服务器端日志将很快显示问题。。。所以最终用户只报告大约的错误时间,而您检查日志并对其采取行动……我在原始问题中添加了更多关于未定义的含义的澄清
{"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"}]}
$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++)
                    {
                        if (response.states[i] != undefined ) {   // here you can add validate expression
                           $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>');
            },
        });
    });