我正在使用 JSONP 将数据从 otherdomain.com 发送到 mydomain.com
但是,当我尝试在 django Controller 中解析 JSONP 数据 (views.py) 时,我遇到了错误。
这是我的代码。
mydomain.com 客户端页面中的 Javascript
jsonData = {
'foo': 'bar',
}
$.ajax({
url: 'http://otherdomain.com/end_point/',
type: 'GET',
contentType: 'application/json; charset=utf-8',
data: jsonData,
dataType : 'jsonp',
jsonp : 'callback'
});
mydomain.com 中的 Django Controller (views.py)
from django.http import JsonResponse
import json
def decode_jsonp(request):
if 'callback' in request.GET:
json_object = json.loads(request.body) # Raise error
json_object = json.dumps(request.body) # Do not raise error but returns nothing
json_object = json.loads(json.dumps(request.body)) # Raise error
foo = json_object['foo']
return JsonResponse({'foo': foo})
我不知道应该用什么代替 json_object = json.loads(request.body)
请您参考如下方法:
JSONP 对象周围有圆括号和回调。但是 Python 的 json 模块无法识别 JSONP 对象。因此,您必须首先通过删除周围的括号和回调名称将其转换为 JSON 对象。
例子
>>> data = 'callback({"key": "val"})' # a common JSONP object
>>>
>>> json.loads(data)
# raises ValueError
>>>
>>> data_json = data.split("(", 1)[1].strip(")") # convert to json
>>> data_json
'{"key": "val"}'
>>>
>>> json.loads(data_json)
# success
