编辑: 我收到解析错误。在ajax完成功能中显示状态时。我知道哪里出错了。
理想情况下,我应该得到坐标并在html页面上显示“这应该显示”。但只显示了坐标。似乎链接getElementById找不到“t01”id标记。此外,当我尝试在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>";
}
}
});
答案 0 :(得分:1)
我创建了一个fiddle
并收到错误:
未捕获的SyntaxError:意外的标识符
答案是:
'[]'
<!-- 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 :(得分:0)
虽然这不是你问题的直接解决方案,但考虑使用jqXHR.success(),jqXHR.error()和jqXHR.complete(jqXHR.success(),jqXHR.fail()和jqXHR.always()。 )从jQuery 1.8开始,不推荐使用回调函数。 请参阅:http://api.jquery.com/jQuery.ajax/