我正在开发社交媒体类型的Web应用程序,到目前为止,在Chrome和Firefox上一切正常。我最近在Safari(iOS和macOS)上发现了一个错误,当我使用中冷器JS发送AJAX请求时,表单数据无法正确发送。
首先发现此问题的原因是,我意识到当人们从通知区域做出响应时,Safari不允许接受朋友的请求。这是当人们接受/拒绝好友通知中的好友请求时的相关HTML
<form method="post" ic-post-to="{% url 'respond-request' item.sender.pk %}">
{% csrf_token %}
<button name="accept" type="submit">Accept</button>
<button name="decline" type="submit">Decline</button>
</form>
在Django视图中,每当有人响应好友请求时,我都会做两件事:
accept
在request.POST
中时,才将用户添加为朋友这是相关代码
# Remove notification
notification = Notification.objects.get(receiver=request.user, sender=userProfile, action="friend_request_received")
notification.delete()
# Remove the request
request.user.friend_requests_received.remove(userProfile)
# If yes, then add to friends and remove from request
if 'accept' in request.POST:
request.user.friends.add(userProfile)
这在Chrome和Firefox上可以正常使用。当某人单击以上HTML上的accept
时,用户成为朋友。当他们单击decline
时,该请求将被删除,并且他们不会成为朋友。
奇怪的是,如果在Safari上使用上述HTML,该请求将被删除,但用户不会成为朋友。我已经在Django中打印了request.POST
,并且可以确认是否按预期从Chrome(而非Safari)发送了POST数据。 Safari在通过中间冷却器发送的AJAX请求中根本不包含accept
或任何形式的数据,这使得上面代码中的if语句永远不会触发。
这仅仅是Intercooler的错误吗?我在各种文章中都看到人们在谈论使用jQuery以某些方式修改AJAX调用,但是我找不到与使用Intercooler相关的任何内容。是否可以仅使用Intercooler和AJAX在Safari上实现我想要的功能?