Функция Javascript продолжается только после ‘else’

#javascript #jquery

#javascript #jquery

Вопрос:

 function getNewMessages(id)
        {
            clearJqGrid();
            var lat;
            var lng;
            var jsonData;
            var geocoder = new google.maps.Geocoder();
            var miles = $('#milesAway').val();

            // find what the user is locating by
            if ($('#zipCode').is(':visible'))
            {
                var zipText = $('#zipCode').val();
                if (isValidUSZip(zipText))
                {
                    geocoder.geocode( { 'address': zipText}, function(results, status) {
                      if (status == google.maps.GeocoderStatus.OK) {
                         lat = results[0].geometry.location.lat();
                         lng = results[0].geometry.location.lng();
                         map.setCenter(results[0].geometry.location);
                      } else {
                        alert("Zip Code couldn't be located.");
                      }
                    });
                }
                else
                {
                    alert('Please enter a valid US zip code.');
                }
            }
            else if ($('#cityState').is(':visible'))
            {
                var address = $('#cityState').val();
                geocoder.geocode( { 'address': address}, function(results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {
                        lat = results[0].geometry.location.lat();
                        lng = results[0].geometry.location.lng();
                        map.setCenter(results[0].geometry.location);
                    } else {
                    alert("City/State combination couldn't be found.");
                    }
                });
            }
            else
            {
                var latlng = map.getCenter();
                lat = latlng.lat();
                lng = latlng.lng();
                jsonData = 
                {
                    latitude: lat,
                    longitude: lng,
                    milesAway: miles
                }
            }

            $.ajax(
            {
                type: "POST",
                url: "<%= Url.Action("CalcLocation", "Home") %>",
                data: jsonData,
                success: function (result) {
                    var messages = resu<
                    for(var i=0;i<messages.length;i  ) 
                        jQuery("#responseMessages").jqGrid(
                                                            'addRowData',
                                                            i 1,
                                                            {distance:messages[i].distance,age:messages[i].age,message:messages[i].message}
                                                          );
                },
                error: function (error) {

                }
            });
        }
  

Таким образом, вызов AJAX выполняется только в том случае, если он проходит через ‘else’ часть оператора if, а не остальные. Почему?

Комментарии:

1. В вашем назначении jsonData отсутствует точка с запятой в конце, но это не должно делать то, что вы говорите. Параметр url вашего ajax-вызова также неправильно использует кавычки (вам нужны одинарные кавычки снаружи или внутри, нельзя использовать один и тот же тип как внутри, так и снаружи). Выдает ли это какие-либо ошибки при загрузке в Chrome или Firefox? Проверьте консоль ошибок.

2. никаких ошибок при загрузке, а после ‘else’ она выполняется нормально и работает безукоризненно

Ответ №1:

Я полагаю, Milimetric на самом деле все правильно понял — вам не хватает точки с запятой в вашем jsonData определении литерала объекта. Это в сочетании с автоматической вставкой точки с запятой в JavaScript и тем, как ваши фигурные скобки {} записываются так, чтобы начинаться с новой строки, весьма вероятно, является проблемой. Поставьте там точку с запятой, и все должно работать нормально.

В других C-подобных языках размещение открывающей фигурной скобки на новой строке или в той же строке является личным предпочтением, но в JavaScript это имеет значение, и поэтому я бы порекомендовал вам приложить сознательные усилия, чтобы поместить открывающие фигурные скобки в ту же строку.