Я занимаюсь разработкой веб-приложения для социальных сетей, и до сих пор все отлично работало на Chrome и Firefox.Недавно я обнаружил ошибку в Safari (как для iOS, так и для macOS), из-за которой данные формы отправляются неправильно, когда я отправляю запрос AJAX с использованием интеркулера JS.
Проблема была обнаружена впервые, когда я понял, что 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 View я делаю две две вещи, когда кто-то отвечает на запрос о дружбе:
- Полностью удалите уведомление / запрос на добавление в друзья
- Добавьте пользователей в друзья, если и только если
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.Когда кто-то нажимает accept
в приведенном выше HTML-коде, пользователи становятся друзьями.Когда они нажимают decline
, запрос удаляется, и они не становятся друзьями.
Странно то, что если в Safari используется вышеуказанный HTML, запрос удаляется, но пользователи не становятся друзьями.,Я напечатал request.POST
в Django и могу подтвердить, что данные POST отправляются так, как я ожидаю от Chrome, но не от Safari. Safari просто не включает accept
или какие-либо данные формы вообще в запрос AJAX, отправляемый через интеркулер, поэтому оператор if в моем коде выше никогда не срабатывает.
Это простоошибка с Intercooler?В разных статьях я видел людей, которые говорили об использовании jQuery для изменения вызова AJAX определенными способами, но я не смог найти ничего, связанного с использованием Intercooler.Есть ли способ достичь того, чего я хочу в Safari, используя только Intercooler и AJAX?