javascript - 无法刷新 DIV python Django 中的数据,也无法刷新 jquery 之后的页面
问题描述
首先让我说我在 HTML 模板中有 2 个变量(消息和用户),并且我有多个按钮,当单击其中一个按钮时,它会调用 jquery 代码,该代码将发布请求发送到 Django 服务器并返回更新到一个变量(消息)但是,它没有更新循环,我还尝试返回一个新的 HTML 页面,其中包含更新的新变量,但 jquery 没有用新的 HTML 更新整个页面
如果我可以单独更新变量会更好,如果我不能这样做,我怎样才能让 jquery 使用新的 HTML 页面我用来将更新返回到 varialbe 消息的 python 代码:
if request.method == 'POST':
send=Message.objects.filter(from_id=request.POST.get('userId'),to_id=2)
rec=Message.objects.filter(from_id=2,to_id=request.POST.get('userId'))
messages=sorted(chain(rec, send),key=lambda instance: instance.id,reverse=True)
print(messages)
return HttpResponse(list(messages))
以及我用来返回新 HTML 模板的代码:
m = Message.objects.filter(to_id=2).order_by('-id')
users = {}
for i in m:
if users.get(i.from_id.username) == None:
users[i.from_id.username] = User.objects.get(id=i.from_id.id)
users = list(users.values())
send=Message.objects.filter(from_id=users[0].id,to_id=2)
rec=Message.objects.filter(from_id=2,to_id=users[0].id)
messages=sorted(chain(rec, send),key=lambda instance: instance.id,reverse=True)
if request.method == 'POST':
send=Message.objects.filter(from_id=request.POST.get('userId'),to_id=2)
rec=Message.objects.filter(from_id=2,to_id=request.POST.get('userId'))
messages=sorted(chain(rec, send),key=lambda instance: instance.id,reverse=True)
print(messages)
return render(request,'psych.html',{"users":users, "messages":list(messages)})
return render(request,'psych.html',{"users":users, "messages":list(messages)})
使用该变量并尝试更新它的 HTML 代码和 jquery 代码
function newUser(id){
$.ajax({
type: 'POST',
url:'/psych.html/',
data:{
userId:id,
},
success: function(data){
console.log(data);// the data returnd are correct and as needed
//but i cant make it update the messages
$('#messageDiv').load(document.URL + ' #messageDiv');
}
})
}
{% for i in users %}
<li class="">
<button type="button" class="btn" onClick="newUser({{i.id}})">
<div class="d-flex bd-highlight">
<div class="img_cont">
<!-- here was an image ----------------------------------------------->
</div>
<div class="user_info">
<span>{{i.id}}</span>
</div>
</div>
</button>
</li>
{% endfor %}
<!-- The varialbe that i'm trying to update is called messages bottom -->
{% for o in messages %}
{% if o.to_id.id != 2 %}
<div class="d-flex justify-content-start mb-4">
<div class="img_cont_msg">
<!-- here was an image-->
</div>
<div class="msg_cotainer">
{{o.message}}
<!-- <span class="msg_time">{{o.time}}</span> -->
</div>
</div>
{% else %}
<div class="d-flex justify-content-end mb-4">
<div class="msg_cotainer_send">
{{o.message}}
<!-- <span class="msg_time_send">{{o.time}}</span> -->
</div>
<div class="img_cont_msg">
<!-- here was an image-->
</div>
</div>
{% endif %}
{% endfor %}
如果它有助于我之前做过并更新了来自 jquery 的消息,但我使用了表单并且只有 1 个变量,我也会将代码添加到该变量中
$(document).on('submit','#submitMessage', function (e){
e.preventDefault();
$.ajax({
type: 'POST',
url:'/psych.html/',
data:{
message:$('#messageHolder').val(),
csrfmiddlewaretoken: $('input[message=csrfmiddlewaretoken]').val(),
},
success: function(data){
// it work like charm here
$('#messageDiv').load(document.URL + ' #messageDiv');
}
})
})
{% for o in messages %}
{% if o.to_id.id == 2 %}
<div class="d-flex justify-content-start mb-4">
<div class="img_cont_msg">
<!-- here was an image-->
</div>
<div class="msg_cotainer">
{{o.message}}
<!-- <span class="msg_time">{{o.time}}</span> -->
</div>
</div>
{% else %}
<div class="d-flex justify-content-end mb-4">
<div class="msg_cotainer_send">
{{o.message}}
<!-- <span class="msg_time_send">{{o.time}}</span> -->
</div>
<div class="img_cont_msg">
<!-- here was an image-->
</div>
</div>
{% endif %}
{% endfor %}
<form id="submitMessage" >
{% csrf_token %}
<div class="card-footer">
<div class="input-group">
<div class="input-group-append"></div>
<input name="message" class="form-control type_msg" placeholder="Type your message..." id="messageHolder">
<div class="input-group-append">
<button type="submit" class="btn">
<span class="input-group-text send_btn" ><i class="fas fa-location-arrow"></i></span>
</button>
</div>
</div>
</div>
</form>
解决方案
尝试这个
$("#messageDiv").load(location.href+" #messageDiv>*");
推荐阅读
- azure - 我可以使用 Azure IoT 边缘网关在叶设备和 Azure IoT 中心之间进行双向通信吗?
- node.js - 无法从 Node 中的 Model.findByID 获取数据 - Express
- c++ - 为什么在函数之外指针数据没有得到更新
- c++ - CMake为目标设置自定义配置名称
- python-3.x - 没有值的 for 循环的输出文件
- elasticsearch - Elasticsearch - 正确的反向边缘 ngram 标记器
- python-3.x - 将 Celery 与烧瓶路线一起使用
- c++ - 设置停靠和选项卡式 CDockablePane 的框架颜色
- javascript - Django/CKEditor/Javascript 问题,包括 textarea 中的文本
- ruby-on-rails - 如何在 Elasticsearch 中编写“或”查询?