ошибка синтаксического анализа в полной функции jquery Ajax

#javascript #jquery #ajax

#javascript #jquery #ajax

Вопрос:

РЕДАКТИРОВАТЬ: я получаю ошибку синтаксического анализа. при отображении статуса в ajax complete function. есть идеи, где я ошибаюсь.

В идеале я должен получить координаты и «это должно отображаться», отображаемое на HTML-странице. Но отображаются только координаты. кажется, ссылка getElementById не может найти тег идентификатора «t01». Также, когда я пытаюсь отобразить переменную содержимого вне вызова ajax, я получаю undefined, даже если содержимое является глобальной переменной.

HTML-код

             $.ajax({
                async: false,
                type: 'GET',
                url: "http://geolocation.webatu.com/Radius.php",
                data: {
                    lat: lat,
                    lon: lon
                },
                dataType: 'jsonp',
                complete: function (response,status) {
                    document.getElementById('t01').innerHTML = status;
                    content = "<ul>";
                    var parsed = JSON.parse(response);
                    for (var i in parsed) {
                        content  = "<li>"   parsed[i].ClassName   " "   parsed[i].City   "</li>";
                    }
                   
                }
            });        
  

Ответ №1:

Я создаю fiddle и получаю сообщение об ошибке:

Ошибка синтаксиса без перехвата: неожиданный идентификатор

Ответ таков:

 '[]'        
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->
  

Таким образом, он терпит неудачу в этом ответе, который не является javascript кодом, как того требует JSONP практика.

Отредактировано (после всех комментариев):

После нескольких попыток я меняю ваш код на этот ( fiddle ):

 window.processResults = function (response) {
    //it must be called with response data inside server answer
    var content = "<ul>";
    var parsed = JSON.parse(response);
    for (var i in parsed) {
        content  = "<li>"   parsed[i].ClassName   " "   parsed[i].City   "</li>";
    }
    document.getElementById('t01').innerHTML = "This should be displayed";
}

function onSuccess(position) {

    var element = document.getElementById('geolocation');

    element.innerHTML = 'Latitude: '   position.coords.latitude   '<br />'  
        'Longitude: '   position.coords.longitude   '<br />';

    lat = position.coords.latitude;
    lon = position.coords.longitude;

    $.ajax({
        async: false,
        type: 'GET',
        url: "http://geolocation.webatu.com/Radius.php?jsonp=processResults",
        data: {
            lat: lat,
            lon: lon
        },
        dataType : 'jsonp',
        jsonp: false,//jQuery will not add it own random callback
        jsonpCallback: 'processResults'//name of callback function which server must wrap the response
    });

}
  

Вы должны изменить ответ с сервера. Вот так, если вы ничего не возвращаете службой:

 processResults('[]');
  

Вместо '[]' как сейчас.

Это JSONP : вы запрашиваете сервер ответов с именем функции javascript, которое является обратным вызовом на стороне вашего клиента, и сервер должен обернуть его ответ в эту функцию.

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

1. да, у вас это не сработает. Вы должны отправить правильные координаты для этого. замените широту и lon в данных $.ajax на 19.0734168 и 72.8994698, и вы получите результат 🙂 он выдаст вам результат, только если вы отправите правильные координаты

2. с этими координатами вы получите результат в виде '[{"ID":"1","ClassName":"somaiya","City":"mumbai","latitude":"19.073507000000","longitude":"72.899545000000","distance":"0.0127697680676876"}, {"ID":"4","ClassName":"Soamiya2","City":"delhi","latitude":"19.073507000000","longitude":"72.899545000000","distance":"0.0127697680676876"}]' <!-- Hosting24 Analytics Code --> <script type="text/javascript" src="http://stats.hosting24.com/count.php"></script> <!-- End Of Analytics Code -->

3. Да, но JSONP означает, что ответ — это код javascript, а jQuery создает тег скрипта с содержимым JSONP. Таким образом, существует синтаксическая ошибка в <!-- Hosting24... , потому что это недопустимый синтаксис javascript.

4. О, я понял!! Но это <!Hosting24 is sent by the web hoisting by default … какие-либо решения?? И теперь я получил сообщение об ошибке, показывающее мне ошибку синтаксического анализа

5. Отредактированный ответ должен сработать, если вы сделаете все, что я написал.

Ответ №2:

Хотя это не прямое решение вашей проблемы, рассмотрите возможность использования jqXHR.done(), jqXHR.fail() и jqXHR.always(), поскольку обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() устарели с версии jQuery 1.8. Смотрите:http://api.jquery.com/jQuery.ajax /

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

1. Хорошо, спасибо, чувак. я получил ошибку. Он показывает мне ошибку синтаксического анализа.