在jquery Ajax完成函数中解析错误

时间:2014-07-02 10:14:44

标签: javascript jquery ajax

编辑: 我收到解析错误。在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>";
                    }

                }
            });        

2 个答案:

答案 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/