Emr*_*inç 2 django jquery cross-domain
对于bookmarklet项目,我正在尝试使用运行Django驱动系统的服务器(当然是在不同的域上)使用jQuery来获取JSON数据.
根据jQuery文档:"从jQuery 1.2开始,如果你指定一个JSONP回调,你可以加载位于另一个域的JSON数据,这可以这样做:"myurl?callback =?".jQuery会自动替换?要调用的方法名称,调用指定的回调." 例如,我可以使用以下代码段在Firebug控制台中成功测试它:
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any& format=json&jsoncallback=?",
function(data){
alert(data.title);
});
Run Code Online (Sandbox Code Playgroud)
它在警报窗口中打印返回的数据,例如"最近上传标记的猫".但是,当我在服务器上尝试类似的代码时,我什么都得不到:
$.getJSON("http://mydjango.yafz.org/randomTest?jsoncallback=?",
function(data){
alert(data.title);
});
Run Code Online (Sandbox Code Playgroud)
没有警报窗口,Firebug状态栏显示"从mydjango.yafz.org转移数据......"并继续等待.在服务器端我有这个:
def randomTest(request):
somelist = ['title', 'This is a constant result']
encoded = json.dumps(somelist)
response = HttpResponse(encoded, mimetype = "application/json")
return response
Run Code Online (Sandbox Code Playgroud)
我也试过这个没有任何成功:
def randomTest(request):
if request.is_ajax() == True:
req = {}
req ['title'] = 'This is a constant result.'
response = json.dumps(req)
return HttpResponse(response, mimetype = "application/json")
Run Code Online (Sandbox Code Playgroud)
简而言之:从Django视图中返回一段数据并以跨域方式使用jQuery检索它的建议方法是什么?我上面的错误是什么?
Emr*_*inç 16
这似乎工作(我忘了处理回调参数!):
服务器端Python/Django代码:
def randomTest(request):
callback = request.GET.get('callback', '')
req = {}
req ['title'] = 'This is a constant result.'
response = json.dumps(req)
response = callback + '(' + response + ');'
return HttpResponse(response, mimetype="application/json")
Run Code Online (Sandbox Code Playgroud)
用于检索此数据的客户端jQuery代码:
$.getJSON("http://mydjango.yafz.org/polls/randomTest?callback=?",
function(data){
alert(data.title);
});
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现相同的效果(在Python和Django编码方面更成熟的方式)?
| 归档时间: |
|
| 查看次数: |
6279 次 |
| 最近记录: |