Skip to main content
 首页 » 编程设计

python之Django之解析 JSONP(带填充的 Json)

2025年05月04日33wuhuacong

我正在使用 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