#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. Хорошо, спасибо, чувак. я получил ошибку. Он показывает мне ошибку синтаксического анализа.