javascript - 带有 Google API 狂热字符的 Django 和 JSON POST

标签 javascript django json post google-directions-api

背景

我正在开发一款帮助人们搜索电梯的应用。我正在使用 Django、Python2.7 和 Google map 和方向 API。

在一个 View 中,我使用 map 并允许用户选择几个位置以及到达和离开时间。然后我使用 Google Directions API 获取点之间的一些备选路线(作为 JSON)。我解析 JSON 并以多种方式更改返回的信息,并将数据保存在新结构中(称为 legs)。到这里为止一切正常。

当用户按下“下一步”按钮时,legs 被字符串化并作为表单的一部分发布到下一个 View 。像这样:

document.getElementById('legs_field').value = JSON.stringify(window.legs);

还可能值得注意的是,这条线工作正常:

JSON.parse(JSON.stringify(window.legs));

问题

在下一个 View 中,我似乎无法让 JavaScript 访问 legs。所以我的问题真的是:如何在下一个 View 中访问相同的 legs 数据结构?

我尝试过的

方法 1:

View .py

legs_json = request.POST.get('legs')
legs = json.loads(legs_json)
arbitrary_processing()
return render_to_response('foo.html',{
        'legs': SafeString(json.dumps(legs)),
        **snipped for brevity**
     })

模板

window.legs_json = '{{legs}}';
**snipped for brevity**

js

window.legs = JSON.parse(window.legs_json);

js 错误:

SyntaxError: JSON.parse: bad escaped character

我以前在处理 JSON 时使用过这种技术,并且效果很好。所以我假设有一些疯狂的 Angular 色正在发生。

方法 2

因为 SafeString 进行了转义,所以我摆脱了它......

我将 view.py 中的上下文更改为:

'legs': json.dumps(legs),
**snipped for brevity**

js 错误:

SyntaxError: JSON.parse: expected property name or '}'

这是预期的。

方法 3

我将 view.py 中的上下文更改为:

'legs': legs_json,
**snipped for brevity**

js 错误:

SyntaxError: JSON.parse: expected property name or '}'

这也是意料之中的

方法 4

我将 view.py 中的上下文更改为:

'legs': SafeString(legs_json),
**snipped for brevity**

然后我得到 python 错误:

UnicodeEncodeError at /set_route/offer/0/
'ascii' codec can't encode character u'\xa9' in position 127: ordinal not in range(128)

我想到的东西

因为我可以对 POST 后的对象进行字符串化和解析,并且可以在后续 View 中解析生成的 JSON,我假设:或者 Python json 模块编码方式与 JSON.js 期望的方式不同(这确实非常令人不安)。

问题

我关于 JSON 在 Django 和 JavaScript 方面的工作的任何假设是否正确? 如果是:我如何解决这个问题并安全地实例化 legs? 如果否:到底出了什么问题?我怎样才能让 legs 安全地实例化?

最佳答案

鉴于 JSON 根据定义是有效的 Javascript,您可以简单地将其作为 JS 数据结构转储到模板中,而不是随后解析的字符串。

window.legs_json = {{legs}};

关于javascript - 带有 Google API 狂热字符的 Django 和 JSON POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15221503/

相关文章:

javascript - 我收到错误代码 "your day value is invalid"

python - 访问主题的内容

JavaScript 琐事 : Function to combine two Array sets?

javascript - 触发代码不起作用 Jquery 上的未捕获错误

javascript - 如何使用 jq 命令行实用程序执行 JSON 对象更新

django - 使用 Django,我想找到今天之后所有发布的事件,但只能从最近的包含事件的月份开始

当用户通过在 Chrome 上返回历史记录注销时,Django @login_required View 仍然显示

javascript - 自动完成 json_encode 按列返回

javascript - 将 JSON 值转换为 JavaScript 数组

javascript - 保护对 Web 服务的 JavaScript 请求