【问题标题】:Read and Parse Django Simplejson HttpResponse JQuery读取和解析 Django Simplejson HttpResponse JQuery
【发布时间】:2011-12-28 07:06:07
【问题描述】:

我让 Django 返回一个 JSON 类型的 HttpResponse,如下所示:

{"lat": "41.1391666667", "alt": " 367401.6875", "lon": " 113.945472222"}

Django views.py 方法的返回语句如下所示:

return HttpResponse( simplejson.dumps( {'lat' : lat , 'alt' : alt , 'lon' : lon} ) , content_type='application/json')

我正在尝试使用带有以下内容的 JQuery 读取 Json:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

    $(document).ready(function(){

        // The JSON (simplejson) Django repsonse looks like:
        // {"lat": "23.5017777778", "alt": " 371405.03125", "lon": " 92.0223333333"}

        document.write('Getting JSON response...');

        $.getJSON(< my django url>,
            function(data) {
            alert(data['alt']);
            });
    });

</script>

</head>


<body>
</body>
</html>

我对 Javascript / JQuery 非常陌生,并且在这里尝试了许多其他帖子的解决方案,但似乎无法在上面运行我的 JQuery 代码得到任何响应(我没有看到显示我的高度的任何警报按钮)。我已经验证了来自 Django 的 JSON 响应看起来不错。对于我在这里做错的事情,我真的很感激。非常感谢。

【问题讨论】:

  • 您是否遇到 JS 错误?你能告诉(来自 FireBug 或 Chrome 开发工具)正在向 django 发出任何请求吗?如果是这样,您会得到预期的响应吗?在你的回调函数中尝试 console.log(data) ,看看它说了什么。需要注意的重要一点是,如果后端抛出任何类型的错误,回调函数将不会被触发——这通常会让 jQuery ajax 的新手绊倒。
  • 感谢您的回复 - 通过 FireBug,我可以看到正在发出请求。在 Profile 下,我可以看到“GET http:// 200 OK 97ms。还有关于响应标头的信息,包括 Content-Type application/json。但是 FireBug 中的 Response 选项卡是空的?如果我转到 URL我自己它返回一个格式正确的 JSON 响应。还有其他想法吗?谢谢
  • 有趣的是,在 Google Chrome 开发工具中,我收到错误消息“XMLHttpRequest 无法加载 http://。 Access-Control-Allow-Origin 不允许来源 http://。'
  • 响应选项卡为空?这听起来像你的问题,就在那里。在您直接访问请求时的请求方式与使用 ajax 的请求方式之间必须存在一些问题。你确定你传入的是相同的参数吗?
  • 你的问题是这样的:stackoverflow.com/questions/1653308/…

标签: javascript jquery django json getjson


【解决方案1】:

请改用data.alt。从alert(data) 开始,以确保您收到数据。我有一个sample code,它使用 $.getJSON() 加上一些基本的 jquery 代码来帮助您入门。

另外,当前的 jquery 是http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js(注意:我的代码落后了一个版本)。

【讨论】:

  • 感谢您的回复 - 我已经尝试了 data.alt 和 alert(data) 但仍然没有收到包含我的数据的弹出窗口。我已经更新到您在回复中包含的最新 jquery。 Firebug 说正在向我的 URL 发出请求,但我没有收到响应,只是标题信息。
【解决方案2】:

这已解决 - 问题在于使用 Chrome 在本地打开与此问题相关的文件:Access-Control-Allow-Origin Multiple Origin Domains?。将文件移动到外部服务器允许它按需要工作。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2013-03-10
    • 2011-12-08
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多