私のGoogle App Engine django-nonrelプロジェクトでChannel APIを使用しようとしています。私の現在の要件として、特定のページにいるすべてのユーザーリスト(例:group_mainpage.html
)を、同じページにいる他のすべてのユーザーに送信したいとします。言い換えれば、もし我々が両方ともこのページにいれば、私たちはどちらもこのページの角のどこかに名前を見ることができます。ユーザーがページから移動すると、その名前をリストから削除する必要があります。しかし、JSONを正しく作って表示することができません。今まで私はこのように行っているが、それは働いていない:Google App Engine Channel APIのsimplejsonダンプ
group_mainpage.html
<html>
<head>
</head>
<body>
<div id="channel_api_params" style="display:none;" chat_token="{{chat_token}}" channel_id="{{channel_id}}"></div>
<div align="center"><font size="5" color="blue">Welcome To Group Main Page</font><br><br>
</div>
<div align="center">
<form method="POST" action="/group_start/">
<input type='submit' value="Start">
</form>
<div id="mydiv">
{% include 'user_list.html' %}
</div>
</div>
<script type="text/javascript" src="/media/jquery.js"></script>
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
<script type="text/javascript">
$(document).ready(function(){
$(window).load(function(){
var channel_id = $('#channel_api_params').attr('channel_id');
$.ajax({
url: '/valid_group_users/',
type: 'GET',
data:{
'channel_id':channel_id,
},
success: function(current_user){
},
complete: function(){
}
});
var chat_token = $('#channel_api_params').attr('chat_token');
var channel = new goog.appengine.Channel(chat_token);
var socket = channel.open();
socket.onopen = function(){
};
socket.onmessage = function(m){
var data = $.parseJSON(m.data);
$('#mydiv').append(data['post_element']);
};
socket.onerror = function(err){
alert("Error => "+err.description);
};
socket.onclose = function(){
alert("channel closed");
};
});
});
</script>
</body>
</html>
views.py
def valid_group_users(request):
channel_id=request.GET['channel_id']
group_initialise=Group_initialise()
group_initialise.channel_id=channel_id
group_initialise.user_name=request.user
group_initialise.save()
try:
data=Group_initialise.objects.all()
except:
pass
#As per the suggestions of Kevin:
user_list=[]
for result in data:
user_list.append(result.user_name)
template_values={'user_list':user_list}
temp_result={'post_element':render_to_response("user_list.html",template_values)}
channel_msg=simplejson.dumps(temp_result)
for result in data:
if result.user_name!=request.user:
channel.send_message(result.channel_id,channel_msg)
user_list.html
{% for users in user_list %}
<div class="message">
<span>
{{users}}:
</span>
</div>
{% endfor %}
EDIT:
temp_result=str(temp_result)
#To remove Http-Header/content-type copy string after 40 characters
temp_result=temp_result[40:]
#Replace colon attaching automatically at the end of every user_name
temp_result=temp_result.replace(':','')
channel_msg=simplejson.dumps(temp_result)
あなたはそれが機能していないと言いましたが、何が起こっているのですか?エラーが出ていますか?データはちょうどよく見えませんか?詳細が役立ちます。 – Herms
こんにちはHerms、私が得ているエラーは、 '0x9e3688cでのはJSONシリアライズ可能ではありません' –
SRC